一尘不染

SQL IF块代码即使不执行也会导致错误

sql

我有一个带有IF-ELSE块的SQL代码。IF部分中的代码不应该到达,但是在执行SQL时仍然出现错误。在我首先测试链接服务器的代码中,当它失败时,@reval将其设置为1,并且该ELSE块应执行并避免IF需要查询链接服务器的块中的代码,但是出现此错误:

Msg -1, Level 16, State 1, Line 0 SQL Server Network Interfaces: Error Locating Server/Instance Specified [xFFFFFFFF].

我正在SSMS 2012中运行查询。为什么会发生此错误?

declare @clientCode VARCHAR(7)
set @clientCode = '8001299'
declare @year INT
set @year = 2013

DECLARE @retVal INT        
-- test connectivity with linked database server
BEGIN TRY
       EXEC @retVal = sys.sp_testlinkedserver N'ATLAS'  
END TRY
BEGIN CATCH
       SET @retval = SIGN(@@ERROR)
END CATCH

IF @retval = 0 -- connection attempt successful 
BEGIN

-下列插入SQL语句导致错误

        SET @contIndex = (SELECT ContIndex FROM ATLAS.Engine_sp.dbo.tblEngagement WHERE ClientCode = @clientCode)          
END
ELSE -- could not connect 
BEGIN
       -- execute code to pull from linked server 
END

阅读 218

收藏
2021-03-08

共1个答案

一尘不染

在执行之前,它仍然会解析并绑定所有内容。它没有绑定到这里。

您可以sp_executesql用来执行该行,并且该行仅应在sp_executesql实际调用时进行验证。

2021-03-08