2012-04-10 17 views
0

Ich bin mir nicht sicher, wie ich das ausdrücken soll. Hier ist das Problem:Dynamisches Openrowset in T-Sql Funktion oder praktikable Alternative?

Ich habe 1-n Elemente, die ich zu einem anderen System (AS400) verbinden muss, um einige Daten zu erhalten.

Die openrowset dauert ewig, wenn ich die where Kriterien außerhalb der openrowset angeben, zum Beispiel:

select * from openrowset('my connection string', 'select code, myfield from myTable') 
where code = @code 

Meine Idee, eine Funktion zu erstellen war, die in der Artikelnummer nimmt und verwendet dynamische SQL es in die zu injizieren openrowset string, a la:

declare @cmd varchar(1000) 
set @cmd = 'select * from openrowset('my connection string', 
     ''select code, myfield from myTable where code = ' + @code + ''')' 

Anscheinend kann ich nicht in das Innere einer Funktion insert.. exec.. Strategie verwenden. Gibt es einen besseren Weg, dies zu erreichen? Ich würde dies in Joins verwenden, wo ich die externen Daten mit cross apply brauchte.

Ich bin nicht verheiratet mit tvf und cross apply, aber ich brauche eine Methode, um diese Daten schnell zu bekommen. Danke für jede Hilfe.

+0

Ich denke, der einzige Weg, dies zu tun wäre, um Ihre Funktion auf eine gespeicherte Prozedur zu ändern, die eine bereits bestehende Tabelle einfügt in dynamische SQL verwenden (wie Ihre zu tun, wurden ausgehend). Dann könnten Sie Abfragen mit den abgerufenen contants dieser Tabelle verbinden. – RBarryYoung

Antwort

1

Sie sollten OPENQUERY verwenden und direkt auf der bereitgestellten Abfrage auf dem Remote-Server filtern. Auf diese Weise stellen Sie sicher, dass die Filterung auf dem anderen Server erfolgt. Auf dem Controller könnten Sie alle Daten vom entfernten Server bekommen und sie lokal filtern, was erklärt, warum die Ausführung so langsam ist. Also, Ihr zweiter Ansatz, aber mit OPENQUERY ist die ideale Lösung.

Sie müssen zu diesem einen Verbindungsserver erstellen.

Sie müssen berücksichtigen, dass die Abfragesyntax die des Remoteservers und nicht T-SQL ist.

OPENQUERY

+0

Ich habe einen Verbindungsserver zum Testen erstellt, aber die Syntax erlaubt mir nicht, die Zeichenfolge für die Abfrage zu ändern ... Wie würde ich den Code-Parameter übergeben? – IronicMuffin

Verwandte Themen