2014-01-24 49 views
3

我有一個情況下,我有一個IF-ELSE塊的SQL代碼。不應該達到IF部分中的代碼,但在執行SQL時仍然會出現錯誤。在代碼中,我首先測試鏈接服務器,如果失敗,@reval設置爲1,ELSE塊應執行並避免需要查詢鏈接服務器的IF塊中的代碼,但出現此錯誤:SQL 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 

--THE以下INSERT 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

90%的發佈代碼是無關緊要的。將其降低到展示問題所需的最低限度。閱讀關於[SSCCE](http://sscce.org) – Bohemian

+0

@Bohemian - 你可能已經給出了你的建議,並沒有給予反對票。 – RoastBeast

+0

我低估了,因爲沒有努力來診斷問題。你基本上粘貼了你的整個代碼和錯誤,並要求我們調試你的代碼。這不是這個網站的工作原理。我以前的建議仍然存在。如果你遵循它,你可能會自己解決問題。 – Bohemian

回答

2

它仍然會解析和執行它之前,它所有的東西綁定。它沒有綁定在這裏。

您可以使用sp_executesql來執行該行,並且它應該僅在實際調用sp_executesql時生效。

+0

謝謝,我沒有意識到這一點。我將有問題的SQL修改爲傳遞給sp_executesql過程的VARCHAR變量,現在它可以工作。 – RoastBeast

相關問題