Dalla documentazione OPENQUERY si afferma che:
OPENQUERY non accetta le variabili per i suoi argomenti.
Vedere questo article per una soluzione alternativa.
UPDATE:
Come suggerito, sto comprese le raccomandazioni l'articolo qui sotto.
Passo di base Valori
Quando l'istruzione di base Transact-SQL è nota, ma si deve passare in uno o più valori specifici, utilizzare il codice che è simile al seguente esempio:
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)
passare la query intero
Quando si deve passare nell'intera query Transact-SQL o il nome del server collegato (o entrambi), utilizzare cod e che è simile al seguente esempio:
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])
Utilizzare la stored procedure sp_executesql
Per evitare le virgolette multilivello, utilizzare il codice che è simile al seguente esempio:
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
Una soluzione è creare una visualizzazione con l'openquery e poi utilizzando la vista nel join – Ismael