SET NOCOUNT 的怪问题

/**/ /*--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
--
*/

-- 添加链接服务器
EXEC sp_addlinkedserver ' srv_lnk ' , '' , ' SQLOLEDB ' , ' . '
EXEC sp_serveroption ' srv_lnk ' , ' rpcout ' , ' true '
GO

-- 测试语句
--
SETNOCOUNTON
BEGIN TRY
DECLARE
@error_number int ,
@error_message nvarchar ( 2048 )

EXEC (N '
SETNOCOUNTON

USEtempdb

BEGINTRY
DELETEFROM[NEWID()]
ENDTRY
BEGINCATCH
SELECT
?=ERROR_NUMBER(),
?=ERROR_MESSAGE()
ENDCATCH
' ,
@error_number OUTPUT,
@error_message OUTPUT
)ATsrv_lnk
END TRY
BEGIN CATCH
SELECT
2 ,
ERROR_NUMBER(),
ERROR_MESSAGE()
END CATCH
GO

-- 删除链接服务器
EXEC sp_dropserver ' srv_lnk ' , ' droplogins '
GO

你可能感兴趣的:(html,sql,.net,Go)