SQL IF块代码导致错误,即使它不应该执行

时间:2014-01-24 02:04:10

标签: sql sql-server sql-server-2012 linked-server ssms-2012

我有一个案例,其中我有一个带有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

1 个答案:

答案 0 :(得分:2)

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

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