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';