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

?
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|