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

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

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';
Другие вопросы по тегам