2014-07-17 5 views
0

저는 오픈 쿼리에 변수를 전달하는 방법에 대한 연구를 해왔습니다. 다음은 내가 작성한 쿼리입니다.'08'근처에 잘못된 구문이 나타납니다. 오류

DECLARE @firstday int; 
DECLARE @lastday int; 

SELECT @firstday = CONVERT(nvarchar(8), (DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE())-1, 0)), 112) 
SELECT @lastday = CONVERT(nvarchar(8), (DATEADD(MONTH, DATEDIFF(MONTH, -1, GETDATE())-1, -1)), 112) 

DECLARE @SqlCommand NVARCHAR(MAX) = N'SELECT * FROM OPENQUERY(EPAK, 
''SELECT WOADAT,WOROUT,BCDESC,WDWO#,BCSIZE,BCCHG 
FROM CUST INNER JOIN (BCDE INNER JOIN (WO2 INNER JOIN WO1 
ON (WDCMP = WOCMP) AND (WDCUS# = WOCUS#) AND (WDWO# = WOWO#)) ON (BCCMPY = WDCMP) 
AND (BCSIZE = WDSIZE) AND (BCCHG = WDCHG)) ON (CCMPNY = BCCMPY) AND (CCUST# = WDCUS#) 
WHERE (((WOADAT) between @firstday and @lastday) AND ((WDCMP)=''08''))order by WDWO#'')' 

EXEC sp_ExecuteSQL @SqlCommand; 

내 연결된 서버가 DB2 서버 내가 내 쿼리를 실행할 때 나는 그것을 카릭을 두 배로 때 나는 다음과 같은 오류

Incorrect syntax near '08'. 

을 얻고,이

SELECT @lastday = CONVERT(nvarchar(8), (DATEADD(MONTH, DATEDIFF(MONTH, -1, GETDATE())-1, -1)), 112) 

을 강조 누군가가 한 번 살펴보고 오류가 무엇인지 알려 주실 수 있습니까? 당신은 인용 문자열이 쿼리로 전달되고있다

((WDCMP)=''''08'''')) 

:

답변

2

나는 당신이 두 개 더 작은 따옴표를 필요가 있다고 생각합니다. 인용의 두 단계. 나는이 문제가 첫 번째 교체 라운드 이후에 발생했다고 생각한다.

((WDCMP)='08')) 

인용구가 정확한 부분 문자열은 "보이지만"보이지 않는다. 첫 번째 인용 부호는 하위 문자열을 끝내고 오류를 생성합니다.

+1

12 초 만에 나를 때리십시오. :) – TMNT2014

+1

또는 매개 변수화 - 내부 명령을 매개 변수로 선언하고 'sp_execsql'에 전달하십시오. 이런 식으로 두 개 이상의 중첩 된 따옴표를 처리 할 필요가 없습니다. –

+0

따옴표를 추가하고 쿼리를 실행할 때이 오류가 있습니다. 연결된 서버 "EPAK"에 대해 OLE DB 공급자 "IBMDA400"메시지가 반환되었습니다. "SQL0206 : Column 또는 글로 z 변수 FIRSTDAY을 찾을 수 없음 원인 : * N의 * N 테이블의 컬럼으로 FIRSTDAY를 찾을 수 없으며 * N의 글로 z 변수로 FIRSTDAY가 발견되지 않았습니다. 테이블이 * N이면 FIRSTDAY는 참조 할 수있는 테이블 또는 뷰의 열 – cojimarmiami

관련 문제