zjcxc(邹建)的Blog - SQL Server

引用或者转载本BLOG的文章请注明原作者和出处,并保留原文章中的版权信息。谢谢!...

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
 
阅读更多
个人分类: BUG与疑难问题
上一篇解决VISTA下安装VS 2005需要先安装XP SP2的问题
下一篇发布一个&quot;文本/文件朗读&quot;小软件
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭