2010-08-04 20 views
5

¿Es posible construir una consulta dinámica para un servidor vinculado (y, en caso afirmativo, cómo)?Consulta del servidor vinculado dinámico

Por ejemplo:

@linkedServer varchar(50) 
@var1 varchar(10) 
@var2 varchar(10) 

select * 
    from openquery(@linkedServer, 
       'select c1,c2 
        from t1 
        where p1 = @var1 
        and p2= @var2') 

Respuesta

4

ejemplo

exec ('select * from openquery(' + @linkedServer + 
', ''select c1,c2 from t1 where p1 = '' + @var1 + ''and p2= '' + @var2 + ''') 

asegúrese de leer The Curse and Blessings of Dynamic SQL para proteger contra la inyección de SQL

2

ver EXEC() at Linked Server sección del The Curse and Blessings of Dynamic SQL by Erland Sommarskog

de ese artículo:

Una característica especial añadido en SQL 2005 es que puede utilizar EXEC() para ejecutar consultas de paso a través de un servidor vinculado . Esta podría ser otra instancia de SQL Server, pero también podría ser un servidor Oracle , una base de datos Access, Directorio activo o lo que sea. El SQL podría ser una sola consulta o una secuencia de de instrucciones, y podría ser compuesto de forma dinámica o estar completamente estático. La sintaxis es simple, como se ve por este ejemplo:

EXEC ('SELECT COUNT (*) de' + + ' .dbo.sysobjects' @DB) AT SQL2K

SQL2K está aquí un servidor vinculado que tiene definido con sp_addlinkedserver.

+0

no funciona con un servidor de nombres dinámicos vinculados, esto no funciona ... EXEC ('SELECT COUNT (*) A partir de dbo.sysobjects') en @linkedServer – SQLMenace

+0

@SQLMenace, esto funcionará 'EXEC ('EXEC (' 'SELECT COUNT (*) FROM' + @db + '.dbo.sysobjects' ') AT' + @ linkedServer) ' –

Cuestiones relacionadas