SQL SP_EXECSQL @VAR для запуска «динамического» OpenQuery - PullRequest
0 голосов
/ 19 января 2011

У меня есть 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 Ответ

3 голосов
/ 19 января 2011

Вы правы, это не работает, потому что не отправляет полную строку на OPENQUERY, вы можете попробовать две вещи.Во-первых, объединяя правильные ', это должно выглядеть так:

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

Или вы можете попробовать объединить эти столбцы в SQL, например:

...