RAISERROR是抛出异常,不过@@Error在开发中基本是用不上的。

解决方案 »

  1.   

    生成错误消息并启动会话的错误处理。RAISERROR 可以引用 sys.messages 目录视图中存储的用户定义消息,也可以动态建立消息。该消息作为服务器错误消息返回到调用应用程序,或返回到 TRY…CATCH 构造的关联 CATCH 块。
    RAISERROR 生成的错误与数据库引擎 代码生成的错误的运行方式相同。RAISERROR 指定的值由 ERROR_LINE、ERROR_MESSAGE、ERROR_NUMBER、ERROR_PROCEDURE、ERROR_SEVERITY、ERROR_STATE 以及 @@ERROR 等系统函数来报告。当 RAISERROR 在严重级别为 11 或更高的情况下在 TRY 块中运行,它便会将控制传输至关联的 CATCH 块。如果 RAISERROR 在下列情况下运行,便会将错误返回到调用方:在任何 TRY 块的作用域之外运行。
    在严重级别为 10 或更低的情况下在 TRY 块中运行。
    在严重级别为 20 或更高的情况下终止数据库连接。
    常,连续的参数替换连续的转换规格;第一个参数替换第一个转换规格,第二个参数替换第二个转换规格,以此类推。例如,在以下 RAISERROR 语句中,第一个参数 N'number' 代替第一个转换规格 %s,,第二个参数 5 代替第二个转换规格 %d。
    RAISERROR (N'This is message %s %d.', -- Message text.
               10, -- Severity,
               1, -- State,
               N'number', -- First argument.
               5); -- Second argument.
    -- The message text returned is: This is message number 5.
    GO
    如果为转换规格的宽度或精度指定了星号 (*),则要用于宽度或精度的值被指定为整数参数值。在这种情况下,一个转换规格最多可以使用三个参数,分别用作宽度、精度和替代值。例如,下列两个 RAISERROR 语句都返回相同的字符串。一个指定参数列表中的宽度值和精度值;另一个指定转换规格中的宽度值和精度值
    RAISERROR (N'<<%*.*s>>', -- Message text.
               10, -- Severity,
               1, -- State,
               7, -- First argument used for width.
               3, -- Second argument used for precision.
               N'abcde'); -- Third argument supplies the string.
    -- The message text returned is: <<    abc>>.
    GO
    RAISERROR (N'<<%7.3s>>', -- Message text.
               10, -- Severity,
               1, -- State,
               N'abcde'); -- First argument supplies the string.
    -- The message text returned is: <<    abc>>.
    GO
    msg_id
    使用 sp_addmessage 存储在 sys.messages 目录视图中的用户定义错误消息号。用户定义错误消息的错误号应当大于 50000。如果未指定 msg_id,则 RAISERROR 引发一个错误号为 50000 的错误消息。msg_str
    用户定义消息,格式与 C 标准库中的 printf 函数类似。该错误消息最长可以有 2,047 个字符。如果该消息包含的字符数等于或超过 2,048 个,则只能显示前 2,044 个并添加一个省略号以表示该消息已被截断。请注意,由于内部存储行为的缘故,替代参数使用的字符数比输出所显示的字符数要多。例如,赋值为 2 的代替参数 %d 实际在消息字符串中生成一个字符,但是还会在内部占用另外三个存储字符串。此存储要求减少了可用于消息输出的字符数。当指定 msg_str 时,RAISERROR 将引发一个错误号为 5000 的错误消息。msg_str 是一个字符串,具有可选的嵌入转换规格。每个转换规格都会定义参数列表中的值如何格式化并将其置于 msg_str 中转换规格位置上的字段中。转换规格的格式如下:% [[flag] [width] [. precision] [{h | l}]] type可在 msg_str 中使用的参数包括: flag用于确定被替换值的间距和对齐的代码。
      

  2.   

    2、是手工激发错误的,这个可以在客户端捕捉到。
    3、看一下这个。
    sp_addmessage
    将新的错误信息添加到 sysmessages 表。语法
    sp_addmessage [ @msgnum =] msg_id ,
        [ @severity = ] severity ,
        [ @msgtext = ] 'msg'
        [ , [ @lang = ] 'language' ]
        [ , [ @with_log = ] 'with_log' ]
        [ , [ @replace = ] 'replace' ]参数
    [@msgnum =] msg_id消息的 ID。msg_id 的数据类型为 int,默认设置为 NULL。用户定义错误信息的可接受值从 50001 开始。msg_id 和 language 的组合必须是唯一的;如果特定语言的 ID 已经存在,则返回一个错误。 [@severity =] severity错误的严重级别。severity 的数据类型为 smallint,默认设置为 NULL。有效级别为 1 到 25。只有系统管理员可以使用从 19 到 25 之间的严重级别添加消息。[@msgtext =] 'msg'错误信息的文本。msg 的数据类型为 nvarchar(255),默认设置为 NULL。 [@lang =] 'language'该消息的语言。language 的数据类型为 sysname,默认设置为 NULL。因为同一服务器上可以安装多种语言,所以 language 将指定写每条消息所用的语言。省略 language 时,语言是会话的默认语言。 [@with_log =] 'with_log'当发生消息时是否将消息写入 Microsoft® Windows NT® 应用程序日志中。with_log 的数据类型为 varchar(5),默认设置为 FALSE。如果为 true,则错误总是写入 Windows NT 应用程序日志。如果为 false,则错误并不是每次都写入应用程序日志,但可以写入 Windows NT  应用程序日志,这取决于错误是如何产生的。只有 sysadmin 服务器角色的成员才能使用该选项。说明  如果消息写入了 Windows NT 应用程序日志,它也将被写入 Microsoft SQL Server™ 错误日志文件。
    [@replace =] 'replace'如果指定为字符串 REPLACE,则新消息文本和严重级别将重写现有的错误信息。replace 的数据类型为 varchar(7),默认设置为 NULL。如果 msg_id 已经存在,则必须指定该选项。如果要替换美国英语的消息,则所有具有相同 msg_id 的其它语言的所有消息严重级别都将被替换。返回代码值
    0(成功)或 1(失败)结果集
    无注释
    对于本地化,在能够以其它语言添加消息之前,消息的美国英语版本必须已经存在。消息的严重度必须匹配。 当本地化包含参数的消息时,使用与原始消息中的参数相应的参数个数。在每个参数个数后都插入感叹号 (!)。 原始消息 本地化的消息 
    'Original message param 1:%s, 
    param 2:%d'
     "本地化的消息参数 1: %1!, 
    参数 2: %2!'
     
    由于语言语法不同,所以本地化消息中的参数个数可能不会以原始消息中相同的序列出现。权限
    只有 sysadmin 和 serveradmin 固定服务器角色成员才能执行该存储过程。示例
    A. 定义自定义的消息
    此示例将自定义的消息添加到 sysmessages。 USE master
    EXEC sp_addmessage 50001, 16, 
       N'Percentage expects a value between 20 and 100. 
       Please reexecute with a more appropriate value.'B. 用两种语言添加消息
    此示例首先用美国英语添加一条消息,然后用法语添加相同的消息。USE master
    EXEC sp_addmessage @msgnum = 60000, @severity = 16, 
       @msgtext = N'The item named %s already exists in %s.', 
       @lang = 'us_english'EXEC sp_addmessage @msgnum = 60000, @severity = 16, 
       @msgtext = N'L''élément nommé %1! existe déjà dans %2!', 
       @lang = 'French'
      

  3.   


    1、用户自定义的错误,随你的系统进行个性定义
    2、raiserror函数,看看联机帮助就成了
    3、使用系统存储过程 sp_addmessage 可将用户定义的错误信息添加到 sysmessages 表。使用 sp_addmessage 至少可以指定消息号、严重级别和消息文本。与用 RAISERROR 指定用户定义错误信息类似,请使用大于 50000 的错误信息号和 0 到 18 的严重级别。只有系统管理员可以发出严重级别从 19 到 25 的 RAISERROR。其实看看联机帮助就应该知道的
      

  4.   

    sp_addmessage添加自定义错误时会分配一个msg_id,用RAISERROR抛错误时指定msg_id就可以抛出用户自定义错误