Gewusst wie: übergeben Sie parameter-Werte einer T-SQL Abfrage
Ich bin mit dem folgenden T-SQL-Abfrage in SQL server 2005 (Management Studio-IDE):
DECLARE @id int;
DECLARE @countVal int;
DECLARE @sql nvarchar(max);
SET @id = 1000;
SET @sql = 'SELECT COUNT(*) FROM owner.myTable WHERE id = @id';
EXEC (@sql) AT oracleServer -- oracleServer is a lined server to Oracle
Ich bin nicht sicher, wie Sie Sie übergeben dem Eingabeparameter @id an die query-EXEC, und geben die Anzahl ergibt sich aus @countVal. Ich sah einige Beispiele für Microsoft SQL server wie:
EXEC (@sql, @id = @id)
Habe ich versucht, dieses für Oracle, aber ich bekam eine Anweisung Fehler:
OLE DB provider "OraOLEDB.Oracle" for linked server "oracleServer"
returned message "ORA-00936: missing expression"
InformationsquelleAutor David.Chu.ca | 2009-02-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie dies:
Mehr Infos zu diesem tollen Artikel: http://www.sommarskog.se/dynamic_sql.html
Als für die Ausgabe, WÄHLEN Sie muss wie folgt Aussehen:
Ich auswähle, 'id' statt '*' zu vermeiden, ziehen unnötige Daten...
Ihre dynamischen sql sollte so etwas wie dieses:
Diesem Beispiel ist adaptiert aus dem gleichen verlinkten Artikel oben im Abschnitt sp_executesql.
Als für Ihre Oracle-Fehler, den Sie benötigen, um herauszufinden, die genaue SQL, verwenden von sp_executesql senden an Oracle. Wenn es ein profiler oder query-log-in Oracle, das kann helfen. Ich haben wenig Erfahrung mit Oracle, aber das wäre der nächste logische Schritt für die Fehlerbehebung problem.
SET @sql = 'select ? = count(*) from Inhaber.mytable'; exec (@sql, @countVal Ausgang) an oracleServer -- Fehler für Oracle-Fall
Das problem bei diesem Ansatz ist, dass man nicht zurückkehren kann das Ergebnis innerhalb einer anderen Gespeicherten Prozedur...ohne erstellen einer temp-Tabelle (nicht möglich mit einer dynamische Abfrage) ...gibt es nicht eine Funktion, die dies tut?
InformationsquelleAutor Jim Counts
Ich weiß nicht warum, Sie sind pass-id separat.
Können Sie das folgende tun
SET @sql = 'SELECT COUNT(*) FROM owner.myTable WHERE id = ' + @id
InformationsquelleAutor shahkalpesh
Die schnelle und schmutzige Weise zu bauen, die Schnur, bevor Sie die EXEC-Anweisung, allerdings ist dies nicht die empfohlene Praxis, wie Sie vielleicht öffnen Sie sich bis zu SQL-Injection.
Den richtigen Weg, dies zu tun, ist die Verwendung der im system gespeicherten Prozedur sp_executesql wie detaillierte durch magnifico, und von Microsoft empfohlenen Bücher Online:
InformationsquelleAutor John Sansom