2011-01-19 1 views
0

OpenQuery (레거시 데이터베이스에 대해 쿼리를 실행하기 위해 SQL2005에서 사용됨)가 있습니다. 마지막 6 개월 동안 데이터를 반환 할 수 있도록 실행할 문자열을 작성하고 있습니다."동적"OpenQuery를 실행하는 SQL SP_EXECSQL @VAR

내가 갖고있는 문제는 '||' 연결하기. 이것은 기존 시스템에서 작동

:

이 연결된 SQL 서버를 통해 SQL2005에서 작동
SELECT 
    EVENT_DATE || ' ' || EVENT_TIME as EVENTDateTime 
FROM 
    EVENT 

는 :

Declare @Query nvarchar(MAX) 
Set @Query = N' 
    SELECT 
     * 
    FROM 
     OPENQUERY(PATCOMLIVE, 
      ''SELECT 
       * 
      FROM 
       root.ESDB_EVENT as EV 
      '' 
      ) as OpenQ'; 

exec sp_executesql @Query 

이 작동하지 않습니다

Declare @Query nvarchar(MAX) 
Set @Query = N' 
    SELECT 
     * 
    FROM 
     OPENQUERY(PATCOMLIVE, 
      ''SELECT 
       EVENT_DATE || '' '' || EVENT_TIME 
      FROM 
       root.ESDB_EVENT as EV 
      '' 
      ) as OpenQ'; 

exec sp_executesql @Query 

아니다이 수행합니다

   EVENT_DATE '|'| '' '' '|'| EVENT_TIME 

나는 간단한 것을 놓치고 있다는 것을 알고있다 ... 그러나 || 문자열을 함께 연결하면 레거시 시스템에서 작동하지만 혼란 스럽습니다.

답변

3

맞습니다. 작동하지 않는 이유는 완전한 문자열을 OPENQUERY으로 전송하지 않기 때문에 두 가지를 시도해 볼 수 있기 때문입니다.

Set @Query = N' 
    SELECT 
     * 
    FROM 
     OPENQUERY(PATCOMLIVE, 
      ''SELECT 
       EVENT_DATE || '''' '''' || EVENT_TIME 
      FROM 
       root.ESDB_EVENT as EV 
      '' 
      ) as OpenQ'; 

을 아니면 다음과 같이 SQL에 그 열을 연결 시도 할 수 있습니다 : 첫째, 올바른 '을 연결, 그것은 다음과 같이해야한다

Set @Query = N' 
    SELECT 
     *, EVENT_DATE + '' '' + EVENT_TIME 
    FROM 
     OPENQUERY(PATCOMLIVE, 
      ''SELECT 
       * 
      FROM 
       root.ESDB_EVENT as EV 
      '' 
      ) as OpenQ'; 
+0

가 '' '' ''일 ''. 문자열 내의 문자열에 대해서도 생각조차하지 않았습니다. 나는 그것이 어리 석 게 단순한 것을 알았다. – WernerCD