微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SET NOCOUNT 的怪问题

/*-- 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] 举报,一经查实,本站将立刻删除。

相关推荐