2010-08-04 17 views
5

È possibile creare una query dinamica per un server collegato (e in caso affermativo come)?Query server collegato dinamico

Ad esempio:

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

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

risposta

4

esempio

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

assicurarsi di leggere The Curse and Blessings of Dynamic SQL per la protezione contro l'iniezione SQL

2

vedere EXEC() at Linked Server sezione del The Curse and Blessings of Dynamic SQL by Erland Sommarskog

da tale articolo:

Una caratteristica speciale aggiunta in SQL 2005 è che è possibile utilizzare exec() per eseguire query pass-through su un server collegato . Potrebbe trattarsi di un'altra istanza di SQL Server, ma potrebbe anche essere un server Oracle , un database di Access, la directory attiva o qualsiasi altra cosa. Lo SQL potrebbe essere una singola query o una sequenza di istruzioni e potrebbe essere composto dinamicamente o essere interamente statico. La sintassi è semplice, come si è visto da questo esempio:

EXEC ('SELECT COUNT (*) FROM' + @Db + ' .dbo.sysobjects') AT SQL2K

SQL2K è qui un server collegato che ha stato definito con sp_addlinkedserver.

+0

non funziona con un server in modo dinamico named collegato, questo non funziona ... EXEC ('SELECT COUNT (*) FROM dbo.sysobjects') AT @linkedServer – SQLMenace

+0

@SQLMenace, questo funzionerà 'EXEC ('EXEC (' 'SELECT COUNT (*) FROM' + @db + '.dbo.sysobjects' ') AT' + @ linkedServer) ' –

Problemi correlati