Jika Anda mencoba menggunakan OPENROWSET
untuk menjalankan kueri terdistribusi ad hoc di SQL Server, tetapi Anda terus mendapatkan kesalahan "sintaks salah", dan Anda tidak dapat melihat ada yang salah dengan sintaks Anda, mungkin Anda mencoba menggunakan variabel untuk salah satu argumen.
Seperti yang disebutkan dalam judul posting ini, OPENROWSET
tidak menerima variabel untuk argumennya.
Jika Anda menggunakan variabel sebagai argumen, coba ubah ini menjadi string literal.
Contoh
Berikut ini contoh untuk didemonstrasikan.
DECLARE @tsql varchar(500);
SET @tsql = 'SELECT * FROM Test.dbo.Cats';
SELECT * FROM OPENROWSET(
'SQLNCLI',
'Server=MyLinkedServer;Trusted_Connection=yes;',
@tsql);
Hasil:
Msg 102, Level 15, State 1, Line 16 Incorrect syntax near '@tsql'.
Jika Anda memeriksa dokumentasi Microsoft, Anda dapat melihat bahwa dokumentasi tersebut secara eksplisit menyatakan bahwa:
OPENROWSET
tidak menerima variabel untuk argumennya.
Jadi jika kita mengubah kode di atas sehingga semua argumen adalah string literal, kita tidak lagi mendapatkan kesalahan.
SELECT * FROM OPENROWSET(
'SQLNCLI',
'Server=MyLinkedServer;Trusted_Connection=yes;',
'SELECT * FROM Test.dbo.Cats');
Hasil:
+---------+-------------+ | CatId | CatName | |---------+-------------| | 1 | Meow | | 2 | Fluffy | | 3 | Scratch | | 4 | Bulldog | | 5 | King George | | 6 | Sharp | | 7 | Fritz | | 8 | Garfield | | 9 | Boss | +---------+-------------+