このクエリで問題が発生しています:
SELECT *
FROM OPENROWSET(
'SQLNCLI',
'DRIVER={SQL Server};',
'EXEC dbo.sProc1 @ID = ' + @id
)
エラーを与えます:
「+」付近の構文が正しくありません。
このエラーが発生する理由は誰でも知っていますか?
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)
OPENROWSETには、式ではなく文字列リテラルが必要です。文字列リテラル以外のものを期待しておらず、文字列リテラルに演算子を使用したため、プラス記号について不平を言っています。
http://msdn.Microsoft.com/en-us/library/ms190312.aspx を参照してください。
「クエリ」
プロバイダーに送信され実行される文字列定数です...
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)
パラメータが必要な場合は、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
価値があるもののために..ストレートリンクサーバークエリではなくopenrowsetを使用する理由は、リンクサーバークエリの処理がローカルサーバーで行われるためです。 (遅く、多くの場合、テーブルのほとんどを戻します)
はい、上記のように文字列の連結を行うことができます。
構文が簡単で、パラメーターの能力がある別のオプション。
リモートボックスにストアドプロシージャを作成します。このプロシージャには必要なすべてのパラメータが含まれています。標準のリンクサーバークエリでストアドプロシージャを呼び出します(上記のsoultionと同じまたはそれ以上のパフォーマンスで、コーディングが非常に簡単です)。
例えばlinkedservername.database.dbo.myproc 123、 'abc'、 'someparam'、getdate()
ただのオプション...