Wie SQL-Abfrage-Parameter-Mapping Probleme zu lösen, während Anbieter mit Oracle OLE DB?

StackOverflow https://stackoverflow.com/questions/58540

  •  09-06-2019
  •  | 
  •  

Frage

Beim Versuch, eine SQL-Abfrage mit Parametern Anbieter mit dem Oracle OLE DB eingeben ich die folgende Fehlermeldung erhalten:

  

Parameter nicht aus dem SQL-Befehl extrahiert werden. Der Anbieter kann nicht helfen, Parameterinformationen aus dem Befehl zu analysieren. In diesem Fall verwenden Sie den „SQL Befehl aus Variable“ Zugriffsmodus, in dem der gesamten SQL-Befehl in einer Variablen gespeichert ist.
  WEITERE INFORMATIONEN:
  Provider können keine Parameterinformationen ableiten und SetParameterInfo noch nicht aufgerufen wurde. (Microsoft OLE DB-Provider für Oracle)

Ich habe nach dem Vorschlag versucht, hier aber nicht ganz verstehen, was erforderlich ist: Parameterized Abfragen für Oracle

Irgendwelche Ideen?

War es hilfreich?

Lösung

Um auf den Link in der Frage gegeben erweitern:

  1. Erstellen Sie eine Paketvariable
  2. Klicken Sie doppelt auf das Paket Variablennamen. (Auf diese Weise können Sie die Eigenschaften der Variable zuzugreifen)
  3. Legen Sie die Eigenschaft 'EvaluateAsExpression' true
  4. Geben Sie die Abfrage in der Expression Builder.
  5. die OLE DB-Quelle Abfrage auf SQL-Befehlssatz von Variable

Der Ausdruck Builder kann Ausdrücke dynamisch erstellen Variable erstellen ‚parametised Abfragen‘.
So ist die folgende 'normale' Abfrage:

select * from book where book.BOOK_ID = ?

Kann im Ausdruckseditor geschrieben werden:

"select * from book where book.BOOK_ID = " + @[User::BookID]

Sie können dann null Handhabung und Datenkonvertierung tun, um die Expression Builder verwenden.

Andere Tipps

Wenn Sie verwenden Datenflusstask und verwenden OLE DB-Quelle, und Sie müssen Ihre Abfrage parametrisieren:

  1. Create Variable „Full“ von Query-Anweisung zu speichern: Mit Rechtsklick auf leeren Bereich außerhalb des Pakets - und klicken Sie Variablen:

Klicken Sie auf Hinzufügen von Variablen auf Variablen-Fenster:

Machen Sie den Namen SQL_DTFLOW_FULL oder etwas, das Sie leicht verstehen können. Die variable data type ist STRING

  1. Erstellen Variable (n) Ihre Parameter zu speichern (s).

das heißt, die volle Abfrage stamements ist:

SELECT * FROM BOOK WHERE BOOK_ID = @BookID --@BookID is SQL Parameter

an der Probe oben, ich habe nur einen Parameter: @BookID, so brauche ich eine Variable erstellen meinen Parameter zu speichern. mehr Variablen hinzufügen, hängt von Ihren Abfragen.

Geben Sie ihm Namen SQL_DTFLOW_BOOKID

Die variable data type ist STRING

So müssen Sie Ihre SSIS ordentlich machen, und die Variablen in verständlichen Teilen sortieren.

Versuchen Sie die Variablennamen zu machen, sind SQL_{TASK NAME}_{VariableName}

  1. Erstellen Ausdruck für SQL_DTFLOW_FULL Variable, klicken Sie auf die Nummer 1, und fill Nummer starten 2. Ihr SQL-Anweisungen Erstellen Sie eine korrekte SQL-Statement-Block mit String zu sein. String-Block unter Verwendung der Regel „Double Quote“ am Anfang und am Ende. Concat die Variablen mit dem String-Block.

Klicken Sie auf Ausdruck, zu zeigen Ergebnis bewerten, um sicherzustellen, dass Ihre Frage richtig ist, das Abfrageergebnis bei SSMS kopieren und einfügen.

Machen Sie selbst sicher, dass die Variablen von SQL Injection mit Ihrer eigenen Logik frei sind. (Verwenden Sie Ihren Entwickler Instinkt)

  1. Öffnen Sie die Datenflusstask, öffnen Sie den OLE DB-Quellcode-Editor durch Doppelklick auf das Element klicken.

  • Wählen Sie den Datenzugriffsmodus: SQL Command From Variable
  • Wählen Sie den Variablenname: SQL_DTFLOW_FULL
  • Klicken Sie auf Vorschau, um sicherzustellen, dass es funktioniert.

Das ist alles, mein Weg, um diesen SSIS Fehlerfall zu verhindern. Da ich auf diese Weise verwenden, ich habe nie das Problem, wissen Sie, SSIS ist etwas seltsam.

den Variablenwert zu ändern, setzen Sie ihn vor dem Datenflusstask, die SQL-Ergebnis SQL_DTFLOW_FULL Variable beliebig verändert jeden Sie Ihre Variablenwert ändern.

In meinem Fall das Problem war, dass ich hatte, innerhalb einer SQL in der normalen Form von / * * / und ich hatte auch Spaltenaliasnamen als „Spaltennamen“ statt [Spaltenname].

Sobald ich sie entfernt es funktioniert.

Versuchen Sie auch Ihre Parameter haben? Anweisung innerhalb der WHERE-Klausel und nicht innerhalb der JOINS, das war ein Teil des Problems zu.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top