SQL SP_EXECSQL @VAR для запуска динамического OpenQuery

У меня есть OpenQuery (используется в SQL2005 для выполнения запроса к устаревшей базе данных). Я создаю строку для запуска, чтобы вернуть данные за последние 6 месяцев.

У меня проблема с '||' конкатировать.

Это работает в устаревшей системе:

SELECT
    EVENT_DATE || ' ' || EVENT_TIME as EVENTDateTime
FROM
     EVENT

Это работает в SQL2005 через связанный SQL Server:

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

Я знаю, что упускаю что-то простое... но || для объединения строк все портит, хотя оно работает в устаревшей системе само по себе.


person WernerCD    schedule 19.01.2011    source источник


Ответы (1)


Вы правы, это не работает, потому что не отправляет полную строку в 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';
person Lamak    schedule 19.01.2011
comment
'''' '''' работал. Даже не думал о строке внутри строки. Я знал, что это что-то до глупости простое. - person WernerCD; 19.01.2011