

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。