create trigger addbook
on book
for insert
as
begin
if not exists (select * from book where book.bno=inserted.bno)
begin
exec proc ins_newbook inserted.bno,inserted.num
end
else
begin
exec proc ins_addbook inserted.bno,inserted.num
end
end要怎么改
on book
for insert
as
begin
if not exists (select * from book where book.bno=inserted.bno)
begin
exec proc ins_newbook inserted.bno,inserted.num
end
else
begin
exec proc ins_addbook inserted.bno,inserted.num
end
end要怎么改
FOR INSERT
AS
BEGIN
IF NOT EXISTS (
SELECT *
FROM book
WHERE book.bno = inserted.bno
)
BEGIN
DECLARE @s1 VARCHAR(8000)
SELECT @s1=ISNULL(@s1+';','')+'EXEC ins_newbook '''+ltrim(bno)+''','''+ltrim(num)+''''
EXEC(@s1)
END
ELSE
BEGIN
DECLARE @s2 VARCHAR(8000)
SELECT @s2=ISNULL(@s1+';','')+'EXEC ins_addbook '''+ltrim(bno)+''','''+ltrim(num)+''''
EXEC(@s2)
END
END
GO
FOR INSERT
AS
BEGIN
IF NOT EXISTS (
SELECT *
FROM book
WHERE book.bno = inserted.bno
)
BEGIN
DECLARE @s1 VARCHAR(8000)
SELECT @s1=ISNULL(@s1+';','')+'EXEC ins_newbook '''+ltrim(bno)+''','''+ltrim(num)+''''
FROM inserted
EXEC(@s1)
END
ELSE
BEGIN
DECLARE @s2 VARCHAR(8000)
SELECT @s2=ISNULL(@s1+';','')+'EXEC ins_addbook '''+ltrim(bno)+''','''+ltrim(num)+''''
FROM inserted
EXEC(@s2)
END
END
GO
create trigger addbook on book
for insert
as
declare c cursor local for select * from inserted;
open c; declare @bno int, @num int;
fetch next from c into @bno, @num;
while @@fetch_status = 0
begin
if not exists (select * from book where bno=@bno)
exec ins_newbook @bno, @num;
else
exec ins_addbook @bno, @num;
fetch next from c into @bno, @num;
end close c;
deallocate c;
go
FOR INSERT
AS
BEGIN
DECLARE @s VARCHAR(8000)
IF NOT EXISTS (
SELECT *
FROM book
WHERE book.bno = inserted.bno
)
BEGIN
SELECT @s = ISNULL(@s+';', '')+'EXEC ins_newbook '''+LTRIM(bno)+''','''+LTRIM(num)+''''
FROM inserted
EXEC(@s)
END
ELSE
BEGIN
SELECT @s=ISNULL(@s+';','')+'EXEC ins_addbook '''+ltrim(bno)+''','''+ltrim(num)+''''
FROM inserted
EXEC(@s)
END
END
GO这样试试
在关键字 'proc' 附近有语法错误。
服务器: 消息 156,级别 15,状态 1,过程 addbook,行 15
在关键字 'proc' 附近有语法错误。
注意复制代码,我代码里面没有用到PROC这个字眼。
服务器: 消息 107,级别 16,状态 2,过程 addbook1,行 6
列前缀 'inserted' 与查询中所用的表名或别名不匹配。
刚刚复制多了,不好意思
1.没有用到inserted 这个逻辑表
2.exec proc 过程名这里面多了个PROC,属于语法错误。
3.没有考虑同时插入多条记录的情况。
执行了,提示这样:
服务器: 消息 107,级别 16,状态 2,过程 addbook1,行 6
列前缀 'inserted' 与查询中所用的表名或别名不匹配。
on book
for insert
as
begin
declare @bno varchar(20) , @num int
set @bno = ((select bno from inserted where(bno=@bno)))
set @num = ((select num from inserted where(bno=@bno)))
if not exists (select * from book where book.bno=inserted.bno)
begin
exec proc ins_newbook @bno,@num
end
else
begin
exec proc ins_addbook @bno,@num
end
end这是我刚刚修改后的,用到了inserted,可是还是错
你EXEC后面的proc怎么老是阴魂不散呢
哦,谢了,我再看看.但是在insert的时候给我这样提示:
服务器: 消息 16924,级别 16,状态 1,过程 addbook,行 8
Cursorfetch: 在 INTO 列表中声明的变量数目必须与所选择的列数目匹配。
语句已终止。可是我那些都一样啊
服务器: 消息 107,级别 16,状态 2,过程 addbook,行 9
列前缀 'inserted' 与查询中所用的表名或别名不匹配。
FOR INSERT
AS
BEGIN
DECLARE @s VARCHAR(8000)
IF NOT EXISTS (
SELECT 1
FROM book,inserted --这里没注意到,跟着楼主错了。
WHERE book.bno = inserted.bno
)
BEGIN
SELECT @s = ISNULL(@s+';', '')+'EXEC ins_newbook '''+LTRIM(bno)+''','''+LTRIM(num)+''''
FROM inserted
EXEC(@s)
END
ELSE
BEGIN
SELECT @s=ISNULL(@s+';','')+'EXEC ins_addbook '''+ltrim(bno)+''','''+ltrim(num)+''''
FROM inserted
EXEC(@s)
END
END
GO