Từ các tài liệu OPENQUERY nó nói rằng:
OPENQUERY không chấp nhận biến cho các đối số của nó.
Xem điều này article để giải quyết sự cố.
UPDATE:
Như đã đề cập, tôi bao gồm các khuyến nghị từ các bài viết dưới đây.
đèo Basic Values
Khi tuyên bố Transact-SQL cơ bản được biết đến, nhưng bạn phải vượt qua trong một hoặc các giá trị cụ thể hơn, sử dụng mã tương tự như các mẫu sau:
DECLARE @TSQL varchar(8000), @VAR char(2)
SELECT @VAR = 'CA'
SELECT @TSQL = 'SELECT * FROM OPENQUERY(MyLinkedServer,''SELECT * FROM pubs.dbo.authors WHERE state = ''''' + @VAR + ''''''')'
EXEC (@TSQL)
Vượt qua Tổng Query
Khi bạn phải vượt qua trong truy vấn Transact-SQL toàn bộ hoặc tên của máy chủ liên kết (hoặc cả hai), sử dụng cá tuyết e rằng cũng tương tự như các mẫu sau:
DECLARE @OPENQUERY nvarchar(4000), @TSQL nvarchar(4000), @LinkedServer nvarchar(4000)
SET @LinkedServer = 'MyLinkedServer'
SET @OPENQUERY = 'SELECT * FROM OPENQUERY('+ @LinkedServer + ','''
SET @TSQL = 'SELECT au_lname, au_id FROM pubs..authors'')'
EXEC (@[email protected])
Sử dụng sp_executesql Stored Procedure
Để tránh các dấu ngoặc kép nhiều lớp, sử dụng mã tương tự như các mẫu sau:
DECLARE @VAR char(2)
SELECT @VAR = 'CA'
EXEC MyLinkedServer.master.dbo.sp_executesql
N'SELECT * FROM pubs.dbo.authors WHERE state = @state',
N'@state char(2)',
@VAR
Một cách giải quyết là tạo ra một cái nhìn với OPENQUERY và sau đó sử dụng giao diện trong tham gia – Ismael