加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SET NOCOUNT 的怪问题

发布时间:2020-12-12 15:59:37 所属栏目:MsSql教程 来源:网络整理
导读:/**/ /* --?SET?NOCOUNT?的问题 SQL?版本 :?SQL?Server?2005?3159 故障描述: 当满足下述条件时,?SET?NOCOUNT?导致?TRY?...?CATCH?无法正确处理错误 1.?使用?EXEC(SQl)?AT?Linked?Server?或者?EXEC?Linked?Server.database?name.dbo.sp_executesql?SQl 2.?SQL

/*--?SET?NOCOUNT?的问题


SQL?版本:?SQL?Server?2005?3159


故障描述:

当满足下述条件时,?SET?NOCOUNT?导致?TRY?...?CATCH?无法正确处理错误

1.?使用?EXEC(<SQl>)?AT?<Linked?Server>?或者?EXEC?<Linked?Server>.<database?name>.dbo.sp_executesql?<SQl>

2.?<SQL>?中包括输出参数

3.?<SQL>?中包括?SET?NOCOUNT?ON?和?USE?<Database?Name>?语句(注意不能更换出现次序)


具体的参考下面的测试示例


与此问题相关的帖子:

http://topic.csdn.net/u/20080103/12/3dafc07c-3376-40c1-b4bd-7cbd76afed1a.html?seed=182508736

--
*/

-- ?添加链接服务器

EXEC ?sp_addlinkedserver?? ' srv_lnk ' , '' , ' SQLOLEDB ' , ' . '

EXEC ?sp_serveroption? ' srv_lnk ' , ' rpc?out ' , ' true ' ????

GO


-- ?测试语句

--
SET?NOCOUNT?ON

BEGIN ?TRY

????
DECLARE

????????????
@error_number ? int ,

????????????
@error_message ? nvarchar ( 2048 )


????
EXEC (N '

SET?NOCOUNT?ON


USE?tempdb


BEGIN?TRY

????DELETE?FROM?[NEWID()]

END?TRY

BEGIN?CATCH

????SELECT

??????????=?ERROR_NUMBER(),

??????????=?ERROR_MESSAGE()

END?CATCH

' ,

????
@error_number ?OUTPUT,

????
@error_message ?OUTPUT

????)AT?srv_lnk

END ?TRY

BEGIN ?CATCH

????
SELECT ?

????????
2 ,?

????????ERROR_NUMBER(),

????????ERROR_MESSAGE()

END ?CATCH

GO


-- ?删除链接服务器

EXEC ?sp_dropserver? ' srv_lnk ' ,? ' droplogins '

GO

?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读