web-dev-qa-db-ja.com

OPENROWSETクエリでの変数の使用

このクエリで問題が発生しています:

SELECT * 
FROM OPENROWSET(
    'SQLNCLI',
    'DRIVER={SQL Server};',
    'EXEC dbo.sProc1 @ID = ' + @id 
 )

エラーを与えます:

「+」付近の構文が正しくありません。

このエラーが発生する理由は誰でも知っていますか?

30
Control Freak

Scottが示唆するように、OPENROWSETで式を使用することはできません。動的SQLを作成してパラメーターを渡すようにしてください。

Declare @ID int
Declare @sql nvarchar(max)
Set @ID=1
Set @sql='SELECT * 
FROM OPENROWSET(
               ''SQLNCLI'',
               ''DRIVER={SQL Server};'',
               ''EXEC dbo.usp_SO @ID =' + convert(varchar(10),@ID) + ''')'

-- Print @sql
 Exec(@sql)
45
praveen

OPENROWSETには、式ではなく文字列リテラルが必要です。文字列リテラル以外のものを期待しておらず、文字列リテラルに演算子を使用したため、プラス記号について不平を言っています。

http://msdn.Microsoft.com/en-us/library/ms190312.aspx を参照してください。

「クエリ」

プロバイダーに送信され実行される文字列定数です...

11
Scott
Declare @Route VARCHAR(200)
Declare @sql nvarchar(max)
Set @Route='C:\OCRevisiones.xlsx;'
Set @sql='SELECT * INTO FFFF
FROM OPENROWSET(
               ''Microsoft.ACE.OLEDB.12.0'',
               ''Excel 12.0;HDR=YES;Database=' + @Route + ''',
               ''SELECT * FROM [Sheet1$]'')'

 Print @sql
 --Exec(@sql)
2
yordinet

パラメータが必要な場合は、sp_executesql

BEGIN

DECLARE
@p_path varchar(200)='D:\Sample\test.xml',  
@v_xmlfile xml,
@v_sql nvarchar(1000)

SET @v_sql=N'select @v_xmlfile= CONVERT(XML, BulkColumn) FROM 
OPENROWSET(BULK '''+@p_path+''', SINGLE_BLOB) AS x;'

EXEC sp_executesql @v_sql,N'@v_xmlfile xml output',@v_xmlfile output;

SELECT @v_xmlfile

END
0
harmath

価値があるもののために..ストレートリンクサーバークエリではなくopenrowsetを使用する理由は、リンクサーバークエリの処理がローカルサーバーで行われるためです。 (遅く、多くの場合、テーブルのほとんどを戻します)

はい、上記のように文字列の連結を行うことができます。

構文が簡単で、パラメーターの能力がある別のオプション。

リモートボックスにストアドプロシージャを作成します。このプロシージャには必要なすべてのパラメータが含まれています。標準のリンクサーバークエリでストアドプロシージャを呼び出します(上記のsoultionと同じまたはそれ以上のパフォーマンスで、コーディングが非常に簡単です)。

例えばlinkedservername.database.dbo.myproc 123、 'abc'、 'someparam'、getdate()

ただのオプション...

0
roblem