2017-02-27 2 views
0

Ich bekomme immer einen unerklärlichen Fehler (siehe unten), wenn ich versuche, eine einfache Abfrage in SSIS 'OLEDB Command auszuführen.SSIS OLEDB-Befehl schlägt fehl - unbekannter Fehler

Meine Abfrage läuft problemlos in SQL Server, habe ich einige Anpassungen vorgenommen, um es einfacher zu machen, um sicherzustellen, dass es ausgeführt wird, aber ohne Erfolg.

DECLARE @Gender [nvarchar](6) 
DECLARE @Ready [nvarchar](12) 
DECLARE @DOB [datetime] 

SET @Gender=? 
SET @Ready=? 
SET @DOB=? 


IF @Gender = 'M' 
    SET @Gender='Male' 
IF @Gender = 'F' 
    SET @Gender='Female' 
IF @Ready='Y' 
    SET @DOB=NULL 

INSERT INTO [dbo].[PHI_CLIENT_PROFILES] 
([col43], 
[col13], 
[col22], 
[col10], 
[origin] 
) 
VALUES 
(@DOB, @Gender, ?, ?, ?) 

Fehlermeldung:

Validierungsfehler. Datenflusstask: Datenflusstask: SSIS-Fehlercode DTS_E_OLEDBERROR. Ein OLE DB-Fehler ist aufgetreten. Fehlercode: 0x80004005. Ein OLE DB-Datensatz ist verfügbar. Quelle: „Microsoft OLE DB Provider für SQL Server“ Hresult: 0x80004005 Beschreibung: „Syntax Fehler oder Zugriffsverletzung“

+1

Geben Sie 7 Variablen auf der Registerkarte "Parameterzuordnung" an? – billinkc

+0

@billinkc nein ich bin nicht wegen dieses Fehlers, die Param-Seite wird * NICHT * aktualisieren. Ich habe 100 verschiedene Versionen ausprobiert und meinen Code Zeile für Zeile hinzugefügt/entfernt, so dass die Param-Seite veraltet ist (sie zeigt 1 Param wegen meiner Zeile-für-Zeile-Methode). Vor dem Brechen des Codes, die Param-Seite würde nichts zeigen – LearnByReading

+0

@billinkc Ich sollte auch hinzufügen, dass das Problem über den variablen Teil scheint. Akzeptiert SSIS OLEDB COMMAN Variablen? Ich habe versucht einen einfacheren Code und es hat funktioniert, aber ich bin ziemlich neu in dieser Aufgabe. – LearnByReading

Antwort

3

Ich weiß nicht, was Sie da vorhaben, aber wenn man die eingefügten Identitäten benötigen oder einige ältere Funktion aufrufen, gibt es keine Notwendigkeit für die OLE DB Command. Die Verwendung dieser Umwandlung zum Ausführen von nur SQL-Insert-Anweisungen in einer einzigen Tabelle sollte vermieden werden, da jede Zeile als separater Batch ausgeführt wird. Versuchen Sie stattdessen eine Zielkomponente.

Fügen Sie eine derived column Komponente hinzu und verwenden Sie die integrierte Ausdrucksfunktionalität. Beispiel:

DerivedGender :  
    [Gender] == "M" ? "Male" : "Female" 
DerivedDOB : 
    [Ready] == "Y" ? NULL(DT_DBTIMESTAMP) : [DOB] 
... 

Verwenden Sie nach der Umwandlung eine OLE DB-Zielkomponente.

In einigen Fällen könnte es sich lohnen zu überprüfen, ob die Foreach Loop Container die Aufgabe lösen kann.

+0

Vielen Dank - ich war mir eigentlich nicht bewusst über die Verwendung dieser Aufgabe. – LearnByReading

+0

Nur eine Sache, aber Ihr Fall ist ungenau: Wenn Geschlecht ist M dann männlich, wenn Geschlecht ist F dann weiblich (es gibt keine anderen), wie können Sie das ausdrücken ??Danke – LearnByReading

+1

'[Geschlecht] ==" M "? "Männlich": [Geschlecht] == ​​"F"? "Weiblich": "Ungültig" ' –

Verwandte Themen