设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12下一页
返回列表 发新帖
查看: 4357|回复: 19
打印 上一主题 下一主题

我的触发器出错了,错在哪?

[复制链接]
跳转到指定楼层
1#
发表于 2004-2-14 05:56:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ALTER TRIGGER tbl材料公共信息_Trigger
ON dbo.tbl材料公共信息
after INSERT
AS
declare @ckcl table
(ckh char(5) not null,
clh char(8) null
)

/*这句出错,把tbl仓库表中的所有仓库编号插入临时表@ckcl*/
insert into @ckcl(ckh)
     select 仓库编号 FROM tbl仓库

/*更新临时表@ckcl中的clh字段为刚插入的材料编号*/
update @ckcl set clh=(select 材料编号 from inserted)

/*把临时表@ckcl中的所有信息插入tbl仓库材料信息表的对应字段中*/
insert into dbo.tbl仓库材料信息(仓库编号,材料编号)
     select * from @ckcl
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
 楼主| 发表于 2004-2-14 17:57:00 | 只看该作者

这是sql server的备份文件,还原回sql server中就可以了

顶一下。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
3#
 楼主| 发表于 2004-2-14 19:16:00 | 只看该作者

用游标实现了上面那个触发器

ALTER TRIGGER tigInsertCKCL
ON dbo.tbl材料公共信息
FOR INSERT
AS
declare @ckh char(5)
declare @clh char(8)
declare ck_cursor cursor
        local
        fast_forward
        for select 仓库编号 from tbl仓库
select @clh=材料编号 from inserted

但上面的为何不行呢?谁能告诉我?

open ck_cursor

fetch next from ck_cursor into @ckh

while (@@fetch_status=0)
begin
        insert into tbl仓库材料信息(仓库编号,材料编号)
        values(@ckh,@clh)
        fetch next from ck_cursor into @ckh
end

close ck_cursor
deallocate ck_cursor

点击这里给我发消息

4#
发表于 2004-2-14 22:24:00 | 只看该作者
T-SQL联机帮助:

table 变量的行为类似于局部变量,有明确定义的作用域。该作用域为声明该变量的函数、存储过程或批处理。
在其作用域内,table 变量可像常规表那样使用。该变量可应用于 SELECT、INSERT、UPDATE 和 DELETE 语句中用到表或表的表达式的地方。但是,table 不能用在下列语句中:

INSERT INTO table_variable EXEC 存储过程。

SELECT select_list INTO table_variable 语句。

在定义 table 变量的函数、存储过程或批处理结束时,自动清除 table 变量。

=======================================
可以这样(示例):

   DECLARE @reports TABLE (empid nchar(5) primary key,
      empname nvarchar(50) NOT NULL,
      mgrid nchar(5),
      title nvarchar(30),
      processed tinyint default 0)
-- initialize @Reports with direct reports of the given employee
   INSERT @reports
   SELECT empid, empname, mgrid, title, 0
   FROM employees
   WHERE empid = @InEmpId


5#
 楼主| 发表于 2004-2-16 03:50:00 | 只看该作者
我今天拿到学校的机房去用,竟然没错,好奇怪。
有条件的朋友请帮我测试一下,下载上面的文件,还原回SQL server中,然后在“tbl材料公共信息”表中输入一条记录,看是否会出错。
我在三台机器上运行都出错,但今天在第四台机器上运行却没错。

点击这里给我发消息

6#
发表于 2004-2-16 04:29:00 | 只看该作者
以下是引用李寻欢在2004-2-15 19:49:34的发言:
我今天拿到学校的机房去用,竟然没错,好奇怪。
有条件的朋友请帮我测试一下,下载上面的文件,还原回SQL server中,然后在“tbl材料公共信息”表中输入一条记录,看是否会出错。
我在三台机器上运行都出错,但今天在第四台机器上运行却没错。


在我这里也没有出错.

环境:Win XP + MSDE2000ReleaseSP3a

在tbl材料公共信息表中添加3条记录,如下:
        12              1         1         sdfw        34        gjj        45        4
        22              1         1         wwe                                2
        33              1         1         fgj        f        g        j        1
自动在tbl仓库材料信息中增加了6条记录,如下:
        zx001        12                                                             
        zx001        22                                                             
        zx001        33                                                             
        ZX002        12                                                             
        ZX002        22                                                             
        ZX002        33                                                             

不知对不对.
7#
 楼主| 发表于 2004-2-16 05:24:00 | 只看该作者
结果是对的,那可能是我的系统的问题,我再找找原因,谢谢。
8#
发表于 2004-2-16 19:32:00 | 只看该作者
这是因为你是否打过SQL SP2或更高版本SP的问题 !
严格说来,Insert into Table 语句中的Table须求的是指定一个表名,而非变量!
9#
 楼主| 发表于 2004-2-16 20:34:00 | 只看该作者
我的SQL SERVER2000是默认安装的,没打任何补丁。
刚刚下载了SP3的补丁并安装,装完之后原来错的那个触发器可以用了,不用使用游标了。
开心:)
10#
 楼主| 发表于 2004-2-16 20:49:00 | 只看该作者

但在Access中还是不行

刚刚打完SQL的sp3被丁,在SQL SERVER里直接输入数据,触发器可以正常运行了
回到Access里,在表中输入,跟以前一样弹出以下对话框:



是否一定要用access2003呢?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-15 17:06 , Processed in 0.094361 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表