【发布时间】:2013-04-23 13:02:41
【问题描述】:
我刚刚创建了一个相反的触发器,其语法如下:
Create trigger tgrInsteadTrigger on copytableto
Instead of Insert as
Declare @store_name varchar(30);
declare @sales int;
declare @date datetime;
select @store_name = i.store_name from inserted i
select @sales = i.sales from inserted i
select @date = i.Date from inserted i
begin
if (@sales > 1000)
begin
RAISERROR('Cannot Insert where salary > 1000',16,1); ROLLBACK;
end
else
begin
insert into copytablefrom(store_name, sales, date) values (@store_name, @sales, @date);
Print 'Instead After Trigger Executed';
end
End
在上面的语法中我使用了RAISERROR('Cannot Insert where salary > 1000',16,1)
但是当我写RAISERROR('Cannot Insert where salary > 1000') 时,它在同一行给出了错误“')' 附近的语法错误”。
谁能在这里解释一下 (16,1) 的用法。
【问题讨论】:
-
RaIsError的语法解释here。 -
此触发器已损坏 - 它假定
inserted中有 单个 行,而实际上可以有 0、1 或 许多inserted中的行。 -
相关:对于 2012+,说明上写着not to use
RAISERROR和useTHROWinstead。
标签: sql sql-server database sql-server-2008 sql-server-2008-r2