惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Simon Willison's Weblog
Simon Willison's Weblog
Help Net Security
Help Net Security
P
Privacy International News Feed
T
Threat Research - Cisco Blogs
C
Cisco Blogs
C
CERT Recently Published Vulnerability Notes
NISL@THU
NISL@THU
L
LINUX DO - 热门话题
Security Latest
Security Latest
A
Arctic Wolf
G
GRAHAM CLULEY
月光博客
月光博客
S
Securelist
D
Docker
J
Java Code Geeks
T
Troy Hunt's Blog
T
Tenable Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
SecWiki News
SecWiki News
S
Security @ Cisco Blogs
量子位
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
L
LINUX DO - 最新话题
Recent Commits to openclaw:main
Recent Commits to openclaw:main
aimingoo的专栏
aimingoo的专栏
博客园 - 【当耐特】
H
Heimdal Security Blog
The Hacker News
The Hacker News
博客园 - 三生石上(FineUI控件)
Application and Cybersecurity Blog
Application and Cybersecurity Blog
N
Netflix TechBlog - Medium
Vercel News
Vercel News
Forbes - Security
Forbes - Security
B
Blog RSS Feed
H
Hackread – Cybersecurity News, Data Breaches, AI and More
IT之家
IT之家
B
Blog
MongoDB | Blog
MongoDB | Blog
博客园 - 聂微东
Google DeepMind News
Google DeepMind News
S
Secure Thoughts
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
C
Check Point Blog
云风的 BLOG
云风的 BLOG
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
T
The Blog of Author Tim Ferriss
L
Lohrmann on Cybersecurity
F
Full Disclosure
D
Darknet – Hacking Tools, Hacker News & Cyber Security
P
Proofpoint News Feed

博客园 - Niyo Wong

用于主题检测的临时日志(f89708b9-f679-4391-af74-c92d9138aed4 - 3bfe001a-32de-4114-a6b4-4005b770f6d7) 测试用Word 2007发布博客 【转】ASP.NET Page事件的执行顺序 ASP.NET页面请求过程 JSP 执行过程 .Net内存分配笔记 UML入门 与健康有约——送给每一个关心自己身体的人 .net 如何设置和检索特性信息(attribute) VC++(MFC)数据库程序——入门 T-SQL编程基础-游标 .net中的4种事务总结 T-SQL编程基础-基本语法 Javascript调用服务器端事件 模式窗口页面不更新的问题 ASP.NET菜鸟进阶-Response.Write与RegisterXXX ASP.NET菜鸟进阶-页面间参数传递 差点把这好地儿给荒废了 我们的生活离不开笑
SQL Server 2005 错误处理笔记
Niyo Wong · 2008-05-16 · via 博客园 - Niyo Wong

  2005之前通过读取变量@@ERROR处理错误, 一个错误用一个非零的@@ERROR信息表示,错误编号必须在每天语句后捕捉, 以及从master数据库中的sysmessage表取错误级别.
2005中新增TRYCATCH, 没有FINALLY
:
BEGIN TRY
       DELETE FROM tbl_Currency WHERE CurrencyCode = 'RMB'
END TRY
BEGIN CATCH
    ...
END CATCH

CATCH子句中的函数, 记住只能在CATCH子句中使用
ERROR_NUMBER()        :      错误号
ERROR_SEVERITY()      :      错误级别
ERROR_STATE()           :      错误状态
ERROR_MESSAGE()       :      错误信息
ERROR_LINE()               :      错误行
ERROR_PROCEDURE()    :      错误存储过程
XACT_STATE()               :      事务状态

前四个来自RAISERROR, 我们也可以用RAISERROR重新抛出错误.

XACT_STATE()的返回值
0     没有事务;             没有但前事务. 不能回滚事务, 因为这样做会导致错误
1     已提交的事务;      进程中有一个事物. 可回滚事务到一个安全点
-1    未提交的事务;      进程中有一个事物, 但是未提交的事务.必须完全回滚该事务(ROLLBACK TRANSACTION, 也许不会做任何可能导致写入事务日志的行动.例如回滚到一个安全点).

RAISERROR函数抛出错误, SQL Server 可以抛出错误状态为0的错误, RAISERROR不允许. RAISERROR只允许字符值或者变量作为输入, 所以上述的函数是不允许的, 必须先赋值给变量, 再给RAISERRROR使用.

RAISERROR ({msg_id | msg_str | @local variable}
    {, severity, state}
    [, argument [,...n ] ] )
    [WITH option [...n]]

:
DECLARE @msg AS NVARCHAR(MAX)
DECLARE @severity AS INT
DECLARE @state AS INTset @msg = ERROR_MESSAGE()
set @severity = ERROR_SEVERITY()
set @state = ERROR_STATE()
RAISERROR(@msg, @severity, @state)

或者

begin try
    RAISERROR ('Error raised in TRY block .', 16, 1 )
end try
begin catch
    DECLARE @msg AS NVARCHAR(MAX)
    DECLARE @severity AS INT
    DECLARE @state AS INT    set @msg = ERROR_MESSAGE()
    set @severity = ERROR_SEVERITY()
    set @state = ERROR_STATE()    RAISERROR(@msg, @severity, @state)
end catch

结果:
Msg 50000, Level 16, State 1, Line 17
Error raised in TRY block .