sql2005有个ERROR_MESSAGE()方法可以把异常信息返回
但是ERROR_MESSAGE()在sql2000中不支持我无法返回去了。求解方法
但是ERROR_MESSAGE()在sql2000中不支持我无法返回去了。求解方法
解决方案 »
- sql 时间搜素
- 超级简单的问题。数据A表复制到B表where a.id=b.id
- select top 的问题
- sqlserver2005 替换指定 位置的 字符串,用什么函数 ?
- 不能对包含聚合或子查询的表达式执行聚合函数 [急]
- 关于SQL Server的问题:能不能不登陆网络就可以通过网络访问服务器上的数据库,关于服务器上数据权限的问题
- 以文件压缩包的形式如何向SQL SERVER数据库插入文件包的数据?
- VFP安装向导的问题????
- 特急!请教各位一个问题,如果您在vfp6.0中使用过DBF()这个函数.....
- 能否举一例子来说说通过SQL查询分析器怎样优化SQL语句?能否详尽?
- sybase ASE oledb Provider 不能在64位机器上使用吗
- PLSqlDev 登录oracle出现:ORA-12514 监听程序当前无法识别连接
与 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 语句执行时由替换参变量填充。
@msg varchar(100) output
as
declare @err intbegin
select 1/0
set @err = @@error
if @err<>0
begin
select top 1 @msg = description
from dbo.sysmessages
where error = @err
and msglangid = 2052 --中文描述
end
end
godeclare @msg varchar(100)
exec p_p1 @msg output
select @msg --这里只是显示结果验证,如果已经获取到,则可以在程序端获取该输出参数
go
大哥你这个网上贴的吧。。这个在sql2005里不行的 我要一个能在sql2000跟05都不出错的。
IF @@ERROR<>0
BEGIN
SELECT @ERROR=ERROR_MESSAGE()(这个error不能在sql2000里用了。)
RETURN @FALSE
END
ELSE
BEGIN
RETURN @TRUE
END
select description
from sys.sysmessages
2000下
select description
from sysmessages
SELECT @ERROR=@@error
@msg varchar(100) output
as
declare @err intbegin
select 1/0
set @err = @@error
if @err<>0
begin
select top 1 @msg = description
from dbo.sysmessages
where error = @err
and msglangid = 2052 --中文描述
end
end
godeclare @msg varchar(100)
exec p_p1 @msg output
select @msg --这里只是显示结果验证,如果已经获取到,则可以在程序端获取该输出参数
go
/*-----------
消息 8134,级别 16,状态 1,过程 p_p1,第 7 行
遇到以零作除数错误。
----------------------------------------------------------------------------------------------------
遇到以零作除数错误。(1 行受影响)
*/
Msg 2714, Level 16, State 3, Procedure p_p1, Line 11
数据库中已存在名为 'p_p1' 的对象。
Msg 8134, Level 16, State 1, Procedure p_p1, Line 7
遇到以零作除数错误。
Msg 208, Level 16, State 1, Procedure p_p1, Line 11
对象名 'dbo.sysmessages' 无效。
那个'dbo.sysmessages' 无效呢
sql2000,貌似只能自己定义。