Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

OPENROWSET tidak menerima variabel untuk argumennya (SQL Server)

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        |
+---------+-------------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server:Sisi gelap NVARCHAR

  2. Cara Membuat Pernyataan Kolom Tambah untuk semua tabel dalam Database di SQL Server - Tutorial SQL Server / T-SQL Part 49

  3. Peregangan Database di SQL Server 2016 RTM

  4. Dapatkan Jumlah Upaya Login yang Gagal untuk Login karena Kata Sandi yang Salah di SQL Server (T-SQL)

  5. Cari Tahu apakah Tabel Dipartisi di SQL Server (T-SQL)