2010-08-04 20 views
5

Ist es möglich, eine dynamische Abfrage für einen Verbindungsserver zu erstellen (und wenn ja wie)?Dynamic Linked Server Abfrage

Zum Beispiel:

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

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

Antwort

4

Beispiel

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

stellen Sie sicher, The Curse and Blessings of Dynamic SQL lesen vor SQL-Injection zu schützen

2

siehe EXEC() at Linked Server Abschnitt The Curse and Blessings of Dynamic SQL by Erland Sommarskog

aus diesem Artikel:

Ein besonderes Merkmal hinzugefügt in SQL 2005 ist , die Sie exec() verwenden können Pass-Through-Abfragen auf einem verknüpften Server auszuführen. Dies könnte eine andere Instanz von SQL Server sein, aber es könnte auch ein Oracle-Server, eine Access-Datenbank, Active Directory oder was auch immer sein. Die SQL könnte eine einzelne Abfrage oder eine Sequenz von Anweisungen sein, und könnte es dynamisch zusammengesetzt sein oder ganz statisch sein. Die Syntax ist einfach, wie von diesem Beispiel zu sehen:

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

SQL2K ist hier ein Verbindungsserver Das wurde mit sp_addlinkedserver definiert.

+0

mit einem verknüpften Server mit dem Namen nicht dynamisch arbeiten, das nicht funktioniert ... EXEC ('SELECT COUNT (*) FROM dbo.sysobjects') AT @linkedServer – SQLMenace

+0

@SQLMenace, diese Arbeit wird 'EXEC ('EXEC (' 'SELECT COUNT (*) FROM' + @db + '.dbo.sysobjects' ') AT' + @ linkedServer) ' –