Ich bin T-SQL-Abfrage direkt in Microsoft SQL Server Studio Abfragefenster gegen zu einer großen Oracle DB, und meinen SQL-Server 2005.Mit T-SQL mit Oracle DB
ich einen verknüpften Server erstellt habe, als myOracleServer. Durch Verwendung der folgenden T-SQL-Abfrage:
SELECT COUNT(*) FROM myOracleServer..owner.myTable WHERE id = 1000 AND Dt = '2009-02-26'
Es dauert mehr als 1 Minute, um nur einen Anruf zu tätigen. Für eine kleine Tabelle ist es OK, aber myTable auf der Oracle-Seite ist sehr groß mit Millionen von Zeilen Daten.
Was ich herausgefunden habe ist, dass ich verwenden OPENQUERY könnte man einen ähnlichen Anruf mit SQL-Abfrage als Pass-Through zu machen. Das Ergebnis ist sehr schnell. Die Ausführungszeit ist 00:00:02!
SELECT * FROM OPENQUERY(myOracleServer, 'SELECT COUNT(*) FROM owner.myTable WHERE ...');
Das Problem, das ich habe, ist, dass die Abfrage keine konstante Zeichenfolge ist. Ich kann id und Dt-Werte in der Abfrage, so etwas wie ändern:
'SELECT COUNT(*) FROM ownwer.myTable WHERE id = ' + CAST(@id AS VARCHAR)...
OPENQUERY nicht eine Variable als Query-String noch Ausdruck nicht unterstützt.
Gibt es eine andere Art und Weise die Pass-Through-Abfrage zu Oracle mit schnellen Leistung zu bekommen?
wie ich erwähnte, unterstützt OPENQUERY Variable. Siehe msdn für OPENQUERY. –
Entschuldigung für Tippfehler: unterstützt nicht ... –
Ja, ich habe es nur angeschaut. Außerhalb der Box könnten Sie einen "temporären" Sproc mit der Anweisung erstellen, aber es wäre ein bisschen Overkill, wenn der Perf-Unterschied nicht wirklich atemberaubend wäre. Ich frage mich, ob ein CLR-Proc eine Option ist. –