我刚刚创建了一个Instead After触发器,其语法如下:
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)的用法吗?
发布于 2013-04-23 21:04:59
它是error的严重级别。级别从11到20,在SQL中抛出错误。级别越高,级别越严重,transaction应该中止。
执行以下操作时会出现语法错误:
RAISERROR('Cannot Insert where salary > 1000').因为您没有指定正确的parameters (severity level或state)。
如果您希望发出警告而不是exception,请使用级别0- 10。
来自MSDN:
严重性
与此消息关联的用户定义的严重级别。当使用msg_id引发使用sp_addmessage创建的用户定义消息时,在RAISERROR上指定的严重性将覆盖在sp_addmessage中指定的严重性。任何用户都可以指定从0到18的严重性级别。从19到25的严重级别只能由sysadmin固定服务器角色的成员或具有ALTER TRACE权限的用户指定。对于从19到25的严重级别,WITH LOG选项是必需的。
状态
是一个从0到255的整数。负值或大于255的值将生成错误。如果在多个位置引发相同的用户定义错误,则为每个位置使用唯一的状态号有助于找出引发错误的代码段。有关详细说明,请参阅here
发布于 2013-04-23 21:07:29
16表示严重性,1表示状态,更具体地说,下面的示例可能会给出更多有关语法和用法的详细信息:
BEGIN TRY
-- RAISERROR with severity 11-19 will cause execution to
-- jump to the CATCH block.
RAISERROR ('Error raised in TRY block.', -- Message text.
16, -- Severity.
1 -- State.
);
END TRY
BEGIN CATCH
DECLARE @ErrorMessage NVARCHAR(4000);
DECLARE @ErrorSeverity INT;
DECLARE @ErrorState INT;
SELECT
@ErrorMessage = ERROR_MESSAGE(),
@ErrorSeverity = ERROR_SEVERITY(),
@ErrorState = ERROR_STATE();
-- Use RAISERROR inside the CATCH block to return error
-- information about the original error that caused
-- execution to jump to the CATCH block.
RAISERROR (@ErrorMessage, -- Message text.
@ErrorSeverity, -- Severity.
@ErrorState -- State.
);
END CATCH;您可以跟踪并尝试来自http://msdn.microsoft.com/en-us/library/ms178592.aspx的更多示例
发布于 2013-04-23 21:06:20
根据MSDN的说法
RAISERROR ( { msg_id | msg_str | @local_variable }
{ ,severity ,state }
[ ,argument [ ,...n ] ] )
[ WITH option [ ,...n ] ]16将是严重程度。
1将是状态。
您得到的错误是因为您没有正确地提供RAISEERROR函数所需的参数。
https://stackoverflow.com/questions/16170073
复制相似问题