六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 66|回复: 0

SET NOCOUNT 的怪问题

[复制链接]

升级  51.15%

661

主题

661

主题

661

主题

探花

Rank: 6Rank: 6

积分
2023
 楼主| 发表于 2013-2-5 09:07:44 | 显示全部楼层 |阅读模式
<div style="padding-right: 5.4pt; padding-left: 5.4pt; background: #e6e6e6; padding-bottom: 4px; width: 95%; padding-top: 4px;">/**//*--SETNOCOUNT的问题

SQL版本:SQLServer20053159

故障描述:
当满足下述条件时,SETNOCOUNT导致TRY...CATCH无法正确处理错误
1.使用EXEC(<SQl>)AT<LinkedServer>或者EXEC<LinkedServer>.<databasename>.dbo.sp_executesql<SQl>
2.<SQL>中包括输出参数
3.<SQL>中包括SETNOCOUNTON和USE<DatabaseName>语句(注意不能更换出现次序)

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

与此问题相关的帖子:
http://topic.csdn.net/u/20080103/12/3dafc07c-3376-40c1-b4bd-7cbd76afed1a.html?seed=182508736
--
*/
--添加链接服务器
EXECsp_addlinkedserver'srv_lnk','','SQLOLEDB','.'
EXECsp_serveroption'srv_lnk','rpcout','true'
GO

--测试语句
--
SETNOCOUNTON
BEGINTRY
DECLARE
@error_numberint,
@error_messagenvarchar(2048)

EXEC(N'
SETNOCOUNTON

USEtempdb

BEGINTRY
DELETEFROM[NEWID()]
ENDTRY
BEGINCATCH
SELECT
?=ERROR_NUMBER(),
?=ERROR_MESSAGE()
ENDCATCH
',
@error_numberOUTPUT,
@error_messageOUTPUT
)ATsrv_lnk
ENDTRY
BEGINCATCH
SELECT
2,
ERROR_NUMBER(),
ERROR_MESSAGE()
ENDCATCH
GO

--删除链接服务器
EXECsp_dropserver'srv_lnk','droplogins'
GO
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

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