MS T-SQL 2008: Выполнение строки openrowset sql не будет работать

#tsql #openrowset

#tsql #openrowset

Вопрос:

Запуск этого кода

DECLARE @SQL VARCHAR(2500) =
'''SELECT z.* from openrowset(''''SQLNCLI'''',''''Server=server;UID=user;PWD=pwd;'''',
''''SELECT distinct x.PackageName
FROM [dw].[dbo].[dex] x
JOIN [dw].dbo.log l on l.executionid = x.SSISExecutionGUID '''') z''' EXECUTE (@SQL)

Выдает синтаксическую ошибку Incorrect syntax near 'select z.*
from openrowset('SQLNCLI', 'Server=server;UID=user;PWD=pw;',
'SELECT distinct x.PackageN'.

если я удалю скобки из (@SQL), ошибка изменится на это: The name ''select z.*
from openrowset(''SQLNCLI'', ''Server=server;UID=user;PWD=pwd;'',
''SELECT distinct x.PackageName
FROM [dw].[dbo].[dex] x join [dw].dbo.log l on l.executionid = x.SSISExecutionGUID ''
) z'' is not a valid identifier.

и самое смешное, что если я изменю Execute на Print, затем вручную возьму напечатанный результат и оберну EXECUTE вокруг него, он работает как ожидалось и возвращает мне мои результаты.

Я думаю, что это какая-то сумасшедшая проблема с одинарными кавычками, но я не вижу ее.

У кого-нибудь есть идеи?

Ответ №1:

Я просто взял выходные данные print и вставил их вместо этого в присваивание переменной, и, похоже, это работает (по крайней мере, насколько я могу судить по этому концу — по крайней мере, это не выдает никаких синтаксических ошибок)

 DECLARE @SQL VARCHAR(2500) = '
SELECT z.* from openrowset(''SQLNCLI'',''Server=server;UID=user;PWD=pwd;'', 
                                       ''SELECT distinct x.PackageName FROM [dw].[dbo].[dex] x
JOIN [dw].dbo.log l on l.executionid = x.SSISExecutionGUID '') z'

EXECUTE (@SQL)
  

Комментарии:

1. Ну, это то, что я сказал, что я сделал в своем посте, и это работает и для меня тоже.

2. Нет, вы сказали, что это сработало, когда вы вставили его в EXEC и выполнили его не тогда, когда вы вставили его в присваивание переменной в качестве моего ответа! Если код в моем ответе работает, я действительно не понимаю, в чем здесь вопрос?