`
逆风的香1314
  • 浏览: 1464491 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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
 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics