このコードを実行する
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をラップすると、期待どおりに機能し、結果が得られることです。
クレイジーな一重引用符の問題だと思いますが、わかりません。
誰かアイデアはありますか?