我有一个案例,其中我有一个带有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
答案 0 :(得分:2)
它仍会在执行之前解析并绑定所有内容。它没有在这里绑定。
您可以使用sp_executesql
来执行该行,并且只应在实际调用sp_executesql
时进行验证。