Nếu bạn đang cố gắng sử dụng OPENROWSET
để chạy một truy vấn phân tán đặc biệt trong SQL Server, nhưng bạn vẫn gặp lỗi "cú pháp không chính xác" và bạn không thể thấy bất kỳ điều gì sai với cú pháp của mình, có thể là bạn đang cố gắng sử dụng một biến cho một trong các các đối số.
Như đã đề cập trong tiêu đề của bài đăng này, OPENROWSET
không chấp nhận các biến cho các đối số của nó.
Nếu bạn đang sử dụng các biến làm đối số, hãy thử thay đổi chúng thành các ký tự chuỗi.
Ví dụ
Đây là một ví dụ để chứng minh.
DECLARE @tsql varchar(500);
SET @tsql = 'SELECT * FROM Test.dbo.Cats';
SELECT * FROM OPENROWSET(
'SQLNCLI',
'Server=MyLinkedServer;Trusted_Connection=yes;',
@tsql);
Kết quả:
Msg 102, Level 15, State 1, Line 16 Incorrect syntax near '@tsql'.
Nếu bạn kiểm tra tài liệu của Microsoft, bạn có thể thấy rằng nó tuyên bố rõ ràng rằng:
OPENROWSET
không chấp nhận các biến cho các đối số của nó.
Vì vậy, nếu chúng tôi thay đổi đoạn mã trên để tất cả các đối số là chuỗi ký tự, chúng tôi sẽ không còn gặp lỗi nữa.
SELECT * FROM OPENROWSET(
'SQLNCLI',
'Server=MyLinkedServer;Trusted_Connection=yes;',
'SELECT * FROM Test.dbo.Cats');
Kết quả:
+---------+-------------+ | CatId | CatName | |---------+-------------| | 1 | Meow | | 2 | Fluffy | | 3 | Scratch | | 4 | Bulldog | | 5 | King George | | 6 | Sharp | | 7 | Fritz | | 8 | Garfield | | 9 | Boss | +---------+-------------+