批量插入时的触发器问题!!

wst302 2005-06-20 06:49:15
我的sql 语句如下批量产生
sql ="insert A(id) values('1') insert A(id) values('2') insert A(id) values('3') ...""

在A表中有insert触发器,经测试当只插入一条时,触发器可以执行,当如上批量多条的insert时
会提示错误:

"子查询返回的值多于一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。
语句已终止。"

请问该如何解决???????

...全文
550 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
wst302 2005-06-20
  • 打赏
  • 举报
回复
我只能修改一次的,当修改多次时,不起作用
wangdehao 2005-06-20
  • 打赏
  • 举报
回复
CREATE TRIGGER InitAwards A
for update
AS
从deleted表可以取出update前的数据
从inserted标可以取出update后的数据
然后用相应的数据update表B
wst302 2005-06-20
  • 打赏
  • 举报
回复
解决,再问一下
如果我是要表A update触发器,触发时,修改表B对应的内容,该如何写
wangdehao 2005-06-20
  • 打赏
  • 举报
回复
CREATE TRIGGER InitAwards ON dbo.ICusInfo
for INSERT
AS
declare @CUSID varchar(4)
declare @ORDPWD varchar(10)
insert into IAwards (AWARDSTATE,ORDPWD,AWARDDATETIME,CUSID) select '0',CUSID,CONVERT(char(20),getDate(),120),LASTORDPWD from inserted
vivianfdlpw 2005-06-20
  • 打赏
  • 举报
回复
--创建测试环境
create table a
(
id int primary key,
name varchar(20)
)

create table b
(
id int primary key,
sex bit
)
go

--创建触发器
create trigger a_to_b
on a
for insert
as
insert b(id)
select id from inserted

go

--插入一条数据
insert a select 1,'AAAAA'
--插入多条数据
declare @sql nvarchar(200)
set @sql=N' insert a select 2,''BBBBBB'''+
N' insert a select 3,''CCCCCC'''+
N' insert a select 4,''DDDDDD'''
exec(@sql)

--查询结果
select * from a
select * from b

--删除测试环境
drop table a
drop table b
wst302 2005-06-20
  • 打赏
  • 举报
回复
单条sql我可以执行,问题是批量放在一个sql语句的时候
sql= "insert .... insert ... insert"
vivianfdlpw 2005-06-20
  • 打赏
  • 举报
回复
--创建测试环境
create table a
(
id int primary key,
name varchar(20)
)

create table b
(
id int primary key,
sex bit
)
go

--创建触发器
create trigger a_to_b
on a
for insert
as
insert b(id)
select id from inserted

go

--插入一条数据
insert a select 1,'AAAAA'
--插入多条数据
insert a select 2,'BBBBB' union select 3,'CCCCC'

--查询结果
select * from a
select * from b

--删除测试环境
drop table a
drop table b
wst302 2005-06-20
  • 打赏
  • 举报
回复
我的触发器,当表ICusInfo有insert记录时,触发向表IAwards插入一条记录
CREATE TRIGGER InitAwards ON dbo.ICusInfo
for INSERT
AS
declare @CUSID varchar(4)
declare @ORDPWD varchar(10)
set @CUSID=(select i.CUSID from Inserted as i)
set @ORDPWD=(select i.LASTORDPWD from Inserted as i)

insert into IAwards (AWARDSTATE,ORDPWD,AWARDDATETIME,CUSID) values('0',@ORDPWD,CONVERT(char(20),getDate(),120),@CUSID)




GRLD8888 2005-06-20
  • 打赏
  • 举报
回复
不好意思,上面的有点乱啦,看这个吧:

create trigger aa
on a
for insert
as
insert a (id)select id from inserted


测试记录:
insert a (id)values(1)
insert a (id)values(2)
GRLD8888 2005-06-20
  • 打赏
  • 举报
回复
你试一下,你要的是这种效果的触发器吗??
create trigger aa
on a
for insert
as
create trigger aa
on a
for insert
as
insert a (id)select id from inserted

测试记录:

insert a (id)values(1)
insert a (id)values(2)
GRLD8888 2005-06-20
  • 打赏
  • 举报
回复
你说得,不很清楚呀,你说在A表中有触发器
那么这个触发器想实现什么样的效果呢
是同样向表中插入相对应记录吗??还是其它呀~~~~
如果是前者的话,是不是这个触发器设计得不够合理呀!!


wangdehao 2005-06-20
  • 打赏
  • 举报
回复
你的触发器写的有问题,贴出来吧

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧