2014-01-24 3 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 년 왜이 오류가 발생에서 쿼리를 실행하고

? INSERT SQL 문을 파악하기

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 

고마웠다 오류

 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

@ 보헤미안에 대해 읽어보십시오 - 귀하는 조언을하고 하향 투표를하지 못했습니다. – RoastBeast

+0

문제를 진단하기위한 노력이 없었기 때문에 나는 다운 받았다. 기본적으로 전체 코드와 오류를 붙여 넣은 다음 코드를 디버깅하도록 요청했습니다. 이 사이트가 작동하는 방식이 아닙니다. 내 이전 조언은 여전히 ​​유효합니다. 만약 당신이 그것을 따라하면 아마 당신 스스로 문제를 해결할 것입니다. – Bohemian

답변

2

그것은 여전히 ​​분석하고 그것을 실행하기 전에 모든 것을 결합하는 것를 초래합니다. 여기에 묶는 데 실패했습니다.

sp_executesql을 사용하면 해당 행을 실행할 수 있으며 실제로는 sp_executesql이 호출 될 때만 유효성을 검사해야합니다.

+0

감사합니다. 나는 그것을 깨닫지 못했습니다. 문제가있는 SQL을 sp_executesql 프로 시저에 전달 된 VARCHAR 변수로 수정했는데 이제는 작동합니다. – RoastBeast

관련 문제