2010-08-04 21 views
5

Czy można utworzyć zapytanie dynamiczne dla połączonego serwera (a jeśli tak, to w jaki sposób)?Zapytanie o dynamiczny serwer połączony

Na przykład:

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

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

Odpowiedz

4

przykład

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

upewnij się, aby przeczytać The Curse and Blessings of Dynamic SQL chronić przed SQL injection

2

zobaczyć EXEC() at Linked Server odcinek The Curse and Blessings of Dynamic SQL by Erland Sommarskog

z tym artykułem:

Szczególną cechą dodany w SQL 2005 jest że można użyć EXEC(), aby uruchomić tranzytowej zapytań na serwerze połączonym . Może to być kolejna instancja serwera SQL Server, ale może to być również serwer Oracle , baza danych Access, Active Directory lub cokolwiek innego. SQL może być pojedynczą kwerendą lub sekwencją instrukcji i może być składnikiem dynamicznym lub całkowicie statycznym. Składnia jest prosta, jak widać na tym przykładzie :

exec ('SELECT COUNT (*) FROM' + @db + ”.dbo.sysobjects') przy SQL2K

SQL2K jest tu połączony serwer która ma została zdefiniowana za pomocą sp_addlinkedserver.

+0

nie działa z dynamicznie nazwie połączonego serwera, to nie działa ... EXEC ('SELECT COUNT (*) FROM dbo.sysobjects') AT @linkedServer – SQLMenace

+0

@SQLMenace, to będzie działać 'EXEC ('EXEC (' SELECT COUNT (*) FROM '+ @ db +' .dbo.sysobjects '') AT '+ @ linkedServer) –