请问一个sys.sysmessages表的问题.

select * from sys.sysmessages..
返回的description列中包含有类似于 %3! %1!.%2!的参数
如:无法从监视服务器 %3! 查询它所记录的有关传送主 %1!.%2! 的信息。

请问在引发sys.sysmessages中的错误时,如果取到参数代表的具体值.
...全文
148 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
王向飞 2010-12-24
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 wggfcusmq 的回复:]
引用 9 楼 wxf163 的回复:
SQL code
这只是一个占位符
每次出错的时候,系统自动替换了。

你试试


DECLARE @@MIN_LVL tinyint,
@@MAX_LVL tinyint,
@@EMP_LVL tinyint,
@@JOB_ID smallint
SELECT @@MIN_LVl = min_lvl,
@@MAX_LV = max_……
[/Quote]难。
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 ap0405140 的回复:]
得到2个相似的字符串,
请楼主自行文本处理成所要的结果,前端程序或SQL里编程都可以的.
[/Quote]
有些占位符中挨在一起的.根本没法用关键字去分割,而且用分割这种方法也是不准确的,不能保证占位符里面的信息就不包含关键字.
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 wxf163 的回复:]
SQL code
这只是一个占位符
每次出错的时候,系统自动替换了。

你试试


DECLARE @@MIN_LVL tinyint,
@@MAX_LVL tinyint,
@@EMP_LVL tinyint,
@@JOB_ID smallint
SELECT @@MIN_LVl = min_lvl,
@@MAX_LV = max_lvl,
……
[/Quote]
我就是想知道每次出错时各占位符将要被替换成的字符串.
不能从输出后的字符串中去分割,基本不太可能准确.
有没有一个系统表或者存储过程什么的能直接获取的到?
唐诗三百首 2010-12-24
  • 打赏
  • 举报
回复
得到2个相似的字符串,
请楼主自行文本处理成所要的结果,前端程序或SQL里编程都可以的.
王向飞 2010-12-24
  • 打赏
  • 举报
回复
这只是一个占位符
每次出错的时候,系统自动替换了。

你试试


DECLARE @@MIN_LVL tinyint,
@@MAX_LVL tinyint,
@@EMP_LVL tinyint,
@@JOB_ID smallint
SELECT @@MIN_LVl = min_lvl,
@@MAX_LV = max_lvl,
@@ EMP_LVL = i.job_lvl,
@@JOB_ID = i.job_id
FROM employee e, jobs j, inserted i
WHERE e.emp_id = i.emp_id AND i.job_id = j.job_id
IF (@@JOB_ID = 1) and (@@EMP_lVl <> 10)
BEGIN
RAISERROR ('Job id 1 expects the default level of 10.', 16, 1)
ROLLBACK TRANSACTION
END
ELSE
IF NOT @@ EMP_LVL BETWEEN @@MIN_LVL AND @@MAX_LVL)
BEGIN
RAISERROR ('The level for job_id:%d should be between %d and %d.',
16, 1, @@JOB_ID, @@MIN_LVL, @@MAX_LVL)
ROLLBACK TRANSACTION
END
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 ap0405140 的回复:]
测试结果如下供参考.

SQL code

select * from table1 -- 其中col1是主键

col1
-----
1
2

begin try
insert into table1 select '2' -- 制造主键重复错误
end try
begin catch
select error_message() as error_m……
[/Quote]

没有达到我说的功能哦.
唐诗三百首 2010-12-22
  • 打赏
  • 举报
回复
测试结果如下供参考.

select * from table1 -- 其中col1是主键

col1
-----
1
2

begin try
insert into table1 select '2' -- 制造主键重复错误
end try
begin catch
select error_message() as error_message
select description as error_message from sys.sysmessages where error=error_number() and msglangid='2052'
end catch

结果如下

error_message
---------------------------------------------
違反 PRIMARY KEY 條件約束 'PK_table1'。無法在物件 'dbo.table1' 中插入重複的索引鍵。重複的索引鍵值為 (2)。

error_message
---------------------------------------------
违反了 %1! 约束 '%2!'。不能在对象 '%3!' 中插入重复键。重复的键值为 %4!。

-->得到2个相似字符串,请楼主自行文本处理成所要的结果.
  • 打赏
  • 举报
回复
如我在2楼的列子,我想得到的就是
%1! =DELETE
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 rucypli 的回复:]
并不代表固定的值 只是一个可替换的参数而已
[/Quote]

是的,我想取到每次引发该错误时这个参数的值.
rucypli 2010-12-22
  • 打赏
  • 举报
回复
并不代表固定的值 只是一个可替换的参数而已
  • 打赏
  • 举报
回复
比如 %1! 语句与 %2! 约束"%3!"冲突。该冲突发生于数据库"%4!",表"%5!"%6!%7!%8!。
在C#的SqlException报的错是
"DELETE 语句与 REFERENCE 约束"FK_Storage_KCAccount_Storage_Goods"冲突。该冲突发生于数据库"SDERP",表"dbo.Storage_KCAccount", column 'GID'。
语句已终止。"

%1! 等就被替换成具体的值了,我现在就想取到各参数代表的值.
唐诗三百首 2010-12-22
  • 打赏
  • 举报
回复
相关资讯如下供参考.
http://technet.microsoft.com/zh-cn/library/ms177546(SQL.90).aspx

22,301

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧