
/**//*--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.youkuaiyun.com/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
本文介绍了一个特定条件下SQL Server 2005中SETNOCOUNT指令导致TRY...CATCH错误处理机制失效的问题。该问题发生在使用EXEC执行远程过程调用并包含输出参数及特定语句顺序的情况下。
3793

被折叠的 条评论
为什么被折叠?



