Pasar una variable a una consulta de servidor vinculado

En este artículo se describe cómo pasar una variable a una consulta de servidor vinculado.

Versión original del producto: SQL Server Libros en pantalla
Número de KB original: 314520

Resumen

Al consultar un servidor vinculado, se realiza con frecuencia una consulta de paso a través que usa la OPENQUERYinstrucción , OPENROWSETo OPENDATASOURCE . Puede ver los ejemplos de SQL Server Libros en pantalla para ver cómo hacerlo mediante cadenas de Transact-SQL predefinidas, pero no hay ejemplos de cómo pasar una variable a estas funciones. En este artículo se proporcionan tres ejemplos de cómo pasar una variable a una consulta de servidor vinculado.

Para pasar una variable a una de las funciones de paso a través, debe crear una consulta dinámica.

Cualquier dato que incluya comillas necesita un control concreto.

Pasar valores básicos

Cuando se conozca la instrucción Básica de Transact-SQL, pero tenga que pasar uno o más valores específicos, use código similar al ejemplo siguiente:

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)

Pasar toda la consulta

Cuando tenga que pasar toda la consulta transact-SQL o el nombre del servidor vinculado (o ambos), use código similar al ejemplo siguiente:

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 (@OPENQUERY+@TSQL)

Uso del procedimiento almacenado Sp_executesql

Para evitar las comillas de varias capas, use código similar al ejemplo siguiente:

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

Consulta también

Para obtener más información, consulte los siguientes temas: