MS T-SQL 2008: выполнение строки sql openrowset не будет работать - PullRequest
2 голосов
/ 12 мая 2011

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

DECLARE @SQL VARCHAR(2500) = '''SELECT z.* from openrowset(''''SQLNCLI'''',''''Server=server;UID=user;PWD=pwd;'''', ''''SELECT distinct x.PackageName FROM [dw].[dbo].[dex] x<br> 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.

и самое смешное, если я переключу «Выполнить на печать», затем вручную возьму напечатанный результат и оберну вокруг него «ВЫПОЛНИТЬ», он будет работать, как ожидалось, и получит мои результаты.

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

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

1 Ответ

1 голос
/ 12 мая 2011

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

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)
...