#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
и выполнили его не тогда, когда вы вставили его в присваивание переменной в качестве моего ответа! Если код в моем ответе работает, я действительно не понимаю, в чем здесь вопрос?