2014-07-15 1 views
3

난 당신이 OPENQUERY에서 변수를 포함 할 수 없습니다 이해 그래서 해결책은 동적 SQL은 내가 다음 않았다 :변수 "준비 이연을 완료 할 수 없습니다"오류

DECLARE @etd AS DATETIME = '2014-06-28' 
DECLARE @source AS VARCHAR(46) 
DECLARE @dbName AS VARCHAR(30) 
DECLARE @query AS VARCHAR(MAX) 
DECLARE @openQuery AS VARCHAR(MAX) 

SELECT TOP(1) @source = [Source], @dbName = DbName 
FROM dbo.SomeTable 
WHERE SystemCode = 'SomeSystem' 

SET @query = 'SELECT * 
    FROM [' + @dbName + '].dbo.Table1 t1 
    LEFT JOIN [' + @dbName + '].dbo.Table2 t2 ON t1.bookno = t2.tranno 
    WHERE (YEAR(t1.etddate) = ' + CAST(YEAR(@etd) AS VARCHAR(4)) + 
    ' AND MONTH(t1.etddate) = ' + CAST(MONTH(@etd) AS VARCHAR(2)) + 
    ' AND DAY(t1.etddate) = ' + CAST(DAY(@etd) AS VARCHAR(2)) +')' 

SET @openQuery = 'SELECT * FROM OPENQUERY([' + @source + '],''' + @query + ''')' 

EXECUTE (@openQuery) 

내가 사용 SELECT @openQuery I 돈 'T는 쿼리 문자열 잘못 아무것도 볼 수 있지만 내가 그것을 실행하면, 나는 다음과 같은 오류받은 : 나는 대답을 찾고 있었어요하지만 난 정말 당신의 도움이들 필요 하나를 찾을 수 없습니다

OLE DB provider "SQLNCLI11" for linked server "xxx.xxx.xxx.xxx,1433" returned message "Deferred prepare could not be completed.".
Msg 8180, Level 16, State 1, Line 1
Statement(s) could not be prepared.
Msg 208, Level 16, State 1, Line 1
Invalid object name 'xxxx.dbo.t1'. (where 'xxxx' is the table name variable)

합니다.

+0

원본이 연결된 서버입니까? Management Studio에서 @query에 내장 된 쿼리를 실행할 수 있습니까? –

+0

안녕하세요, Martin K., 미안하지만 정확히 무슨 뜻입니까? – arvstracthoughts

답변

0

일시적으로 EXECUTE를 PRINT (PRINT @openQuery)로 변경하고 실제로 생성되는 SQL을 확인한 다음 SSMS에서 직접 생성 된 SQL을 실행하려고 시도 할 수 있습니다. 생성 된 SQL을 볼 때 분명 할 수도 있지만 그렇지 않은 경우 더 자세한 설명이 포함 된 오류 메시지가 표시 될 수 있습니다.

관련 문제