mysql5资源共享

 找回密码
 立即注册
查看: 34|回复: 1

[MS-SQL Server] 【疑难】如何获取错误代码?!

[复制链接]

3

主题

12

帖子

33

积分

新手上路

Rank: 1

积分
33
发表于 2019-7-19 14:21:54 | 显示全部楼层 |阅读模式
BEGINTRY
BEGINTRAN
INSERTINTO表1(字段)VALUES('123')
SELECT@@TRANCOUNTASA1
COMMITTRAN;
ENDTRY
BEGINCATCH
SELECT@@TRANCOUNTASA2
ROLLBACKTRAN;
SELECTERROR_MESSAGE()ASErrorMessage,ERROR_SEVERITY()ASErrorSeverity,ERROR_STATE()ASErrorState,@@ROWCOUNTasROWCOUNTs,error_number()asnumber
ENDCATCH


上述语句可以捕获到大致的错误信息,前提是表1字段存在;另外通过rowcount也可以大致判断是否有成功执行。
我的问题是:当表1的字段不存在时,数据库会提示消息207(SELECT*FROMsys.messagesWHERElanguage_id=2052ANDmessage_id=207;),但上述语句无法捕获这信息,请问在这情况下有没有办法以字段查询的形式提示列名'%1!'无效人提示?!而不是红色字段的数据库自身错误提示。
回复

使用道具 举报

7

主题

531

帖子

1089

积分

金牌会员

Rank: 6Rank: 6

积分
1089
发表于 2019-7-19 14:57:51 | 显示全部楼层
可以用存储过程封装,

  1. --创建表1含有[字段]
  2. createtable表1(字段varchar(10))

  3. --创建存储过程
  4. createprocdbo.sp20190719
  5. as
  6. begin
  7. INSERTINTO表1(字段)VALUES('123')
  8. end

  9. --删除表1,重建表1,[字段]改名为[字段x]
  10. droptable表1

  11. createtable表1(字段xvarchar(10))


  12. --测试
  13. BEGINTRY
  14. BEGINTRAN
  15. execdbo.sp20190719
  16. COMMITTRAN;
  17. ENDTRY
  18. BEGINCATCH
  19. SELECTERROR_MESSAGE()ASErrorMessage,ERROR_SEVERITY()ASErrorSeverity,ERROR_STATE()ASErrorState,@@ROWCOUNTasROWCOUNTs,error_number()asnumber
  20. ENDCATCH

  21. /*
  22. ErrorMessageErrorSeverityErrorStateROWCOUNTsnumber
  23. -----------------------------------------------------------------------------
  24. Invalidcolumnname'字段'.1610207

  25. (1行受影响)
  26. */
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|mysql5.com Inc. ( 闽ICP备17002856号-1 )

GMT+8, 2019-10-22 07:41 , Processed in 0.044877 second(s), 18 queries .

Powered by MySQL5.com X3.4

© 2003-2019 MySQL5.com.

快速回复 返回顶部 返回列表