首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RAISERROR()的语法含义是什么

RAISERROR()的语法含义是什么
EN

Stack Overflow用户
提问于 2013-04-23 21:02:42
回答 5查看 205.2K关注 0票数 59

我刚刚创建了一个Instead After触发器,其语法如下:

代码语言:javascript
复制
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)的用法吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-04-23 21:04:59

它是error的严重级别。级别从11到20,在SQL中抛出错误。级别越高,级别越严重,transaction应该中止。

执行以下操作时会出现语法错误:

代码语言:javascript
复制
RAISERROR('Cannot Insert where salary > 1000').

因为您没有指定正确的parameters (severity levelstate)。

如果您希望发出警告而不是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

票数 73
EN

Stack Overflow用户

发布于 2013-04-23 21:07:29

16表示严重性,1表示状态,更具体地说,下面的示例可能会给出更多有关语法和用法的详细信息:

代码语言:javascript
复制
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的更多示例

票数 37
EN

Stack Overflow用户

发布于 2013-04-23 21:06:20

根据MSDN的说法

代码语言:javascript
复制
RAISERROR ( { msg_id | msg_str | @local_variable }
    { ,severity ,state }
    [ ,argument [ ,...n ] ] )
    [ WITH option [ ,...n ] ]

16将是严重程度。

1将是状态。

您得到的错误是因为您没有正确地提供RAISEERROR函数所需的参数。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16170073

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档