关闭

SET NOCOUNT 的怪问题

标签: sqlserveroutput服务器go测试sql
2946人阅读 评论(0) 收藏 举报
分类:
/*-- 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
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1278917次
    • 积分:14873
    • 等级:
    • 排名:第816名
    • 原创:178篇
    • 转载:9篇
    • 译文:0篇
    • 评论:881条
    最新评论