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
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值