2

このコードを実行する

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をラップすると、期待どおりに機能し、結果が得られることです。

クレイジーな一重引用符の問題だと思いますが、わかりません。

誰かアイデアはありますか?

4

1 に答える 1

1

印刷の出力を取得して、代わりに変数の割り当てに貼り付けたところ、機能しているように見えます(少なくとも、この目的を理解できる限り、少なくとも構文エラーは発生しません)。

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)
于 2011-05-11T23:39:56.710 に答える