使用 RAISERROR
与 PRINT 相比,RAISERROR 在把消息返回给应用程序方面的功能更强大。RAISERROR 能以下列方式中的任意一种返回消息: 已通过 sp_addmessage 系统存储过程添加到 master.dbo.sysmessages 上的由用户定义的错误信息。
在 RAISERROR 语句中指定的消息字符串。 
RAISERROR 也有 PRINT 功能的一些扩展: RAISERROR 能够指派一个特定的错误号、严重度和状态。
RAISERROR 能够请求将错误记入 Microsoft® SQL Server™ 2000 错误日志和 Microsoft Windows NT® 应用程序日志中。
消息字符串可以包含替代变量和参量,这与 C 语言中的 printf 功能相似。 
当 RAISERROR 在sysmessages 中与用户定义消息的 msg_id 一同使用时,msg_id 被作为 SQL Server 的错误号码或本机错误代码返回。而当 RAISERROR 与 msg_str 而不是 msg_id 一同使用时,返回的 SQL Server 的错误号和本机错误号为 50000。当使用 RAISERROR 返回一个用户定义的错误信息时,在每个引用该错误的 RAISERROR 中使用不同的状态号码。这可以在发生错误时帮助进行错误诊断。 RAISERROR 可以帮助我们发现并解决 Transact-SQL 代码中的问题、检查数据值或返回包含变量文本的消息。下面的示例在返回给应用程序的消息中替换了 DB_ID 和 DB_NAME 函数的值:DECLARE @DBID INT
SET @DBID = DB_ID()DECLARE @DBNAME NVARCHAR(128)
SET @DBNAME = DB_NAME()RAISERROR
   ('The current database ID is:%d, the database name is: %s.',
    16, 1, @DBID, @DBNAME)而以下示例使用由用户定义的消息完成了同样的处理:sp_addmessage 50005, 16,
    'The current database ID is:%d, the database name is: %s.'
GO
DECLARE @DBID INT
SET @DBID = DB_ID()DECLARE @DBNAME NVARCHAR(128)
SET @DBNAME = DB_NAME()RAISERROR (50005, 16, 1, @DBID, @DBNAME)
GO第二个 RAISERROR 示例显示,替换参数可以在由用户定义的错误中指定,并且当 RAISERROR 语句执行时由替换参变量填充。

解决方案 »

  1.   

    用户如何使用自定义的错误消息1) 用户先要添加错误信息到sysmessage表,使用sp_addmessage 过程比如要添加错误算法标志这条消息use master
    goEXEC sp_addmessage @msgnum = 50001, @severity = 16, 
       @msgtext = N'错误算法标志', 
       @lang = 'us_english'  
    --注意必须添加此消息的 us_english 版本后,才能添加Simplified Chinese版本goEXEC sp_addmessage 50001, 16, 
       N'错误算法标志',
       @lang='Simplified Chinese'2) 用户在程序检索自定义的错误消息返回客户端exec('select * from 一个不在的表')
     if @@error<>0
    raiserror(50002,16,3)-----
    服务器: 消息 208,级别 16,状态 1,行 1
    对象名 '一个不在的表' 无效。
    服务器: 消息 50002,级别 16,状态 3,行 3
    错误算法标志 --这是用户自定义的消息