/*
-- 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
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