1

I OPENROWSET bin mit einer .csv-Datei in SQL Server für den Import von 2014SQL Server: Datensatz Einfügen, wenn nicht in der Tabelle aus einer Funktion in Select gefunden

Das ist meine Abfrage

SELECT 
    ufnGetChargeTypeId([Charge Type]) AS ChargeTypeId, [Description] 
FROM 
    OPENROWSET ('MSDASQL', 
       'Driver={Microsoft Access Text Driver (*.txt, *.csv)}; DBQ=D:\Files\;', 
       'SELECT * from [myfile.csv]') 

[Charge Type] Spalt Header in der .csv Datei. ufnGetChargeTypeId ist eine Funktion, die ChargeTypeId zurückgibt, wenn sie in Tabelle ChargeType gefunden wird, die eine Referenztabelle ist.

Funktioniert einwandfrei, wenn [Charge Type] vorhanden sind. Ich möchte [Charge Type] in Tabelle einfügen, wenn nicht gefunden und ChargeTypeId zurückgeben. Benutzerdefinierte Funktionen unterstützen INSERT/UPDATE in der Tabelle nicht.

Eine Lösung ist die Verwendung einer gespeicherten Prozedur, aber ich rufe Funktion in Select Anweisung, und Sie können nicht gespeicherte Prozedur in Select Anweisung ausgeführt werden.

Würdest du irgendeine Lösung für mein Problem vorschlagen.

+1

Dump einem Staging-Tabelle und führen Sie dann Vergleiche – TheGameiswar

Antwort

0

Sie können zunächst alle fehlenden Typen einsetzen, dann Abfrage ausführen:

DECLARE @T TABLE([Charge Type] varchar(4000), [Description] text) 

INSERT INTO @T 
SELECT [Charge Type], [Description] 
FROM 
    OPENROWSET ('MSDASQL', 
       'Driver={Microsoft Access Text Driver (*.txt, *.csv)}; DBQ=D:\Files\;', 
       'SELECT * from [myfile.csv]') 

INSERT INTO ChargeTypes ([Charge Type]) 
SELECT DISTINCT [Charge Type] 
FROM @T 
WHERE [Charge Type] NOT IN (SELECT [Charge Type] FROM ChargeTypes) 

SELECT 
    ufnGetChargeTypeId([Charge Type]) AS ChargeTypeId, [Description] 
FROM @T 
+0

Dank paaren Ihre Lösung gearbeitet – Ammar