1

J'utilise OPENROWSET pour importer un fichier .csv dans SQL Server 2014.SQL Server: Insérer un enregistrement si introuvable dans la table d'une fonction Sélectionnez

Ceci est ma requête

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] est la colonne en-tête dans le fichier .csv. ufnGetChargeTypeId est une fonction qui renvoie ChargeTypeId si elle se trouve dans le tableau ChargeType qui est une table de référence. Fonctionnement correct si [Charge Type] existe. Je veux insérer [Charge Type] dans la table si non trouvé et retourner ChargeTypeId. Les fonctions définies par l'utilisateur ne prennent pas en charge INSERT/UPDATE dans la table.

Une solution consiste à utiliser une procédure stockée mais j'appelle la fonction dans l'instruction Select et vous ne pouvez pas exécuter la procédure stockée dans l'instruction Select.

Suggérez-vous une solution à mon problème.

+1

Dump à une table de mise en scène, puis faire des comparaisons – TheGameiswar

Répondre

0

Vous pouvez insérer d'abord tous les types manquants, puis exécutez votre requête:

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

Merci accouplent votre solution a fonctionné – Ammar