J'essaie de déterminer comment importer certaines données CSV dans une database MS SQL.
Malheureusement, ce n'est pas aussi simple que ça en a l'air, puisque plus d'une table est impliquée. Certains champs seront également extraits du file CSV, tandis que d'autres auront des valeurs fixes.
En termes de relation entre plusieurs tables, ma logique serait la suivante:
IF <select count(course_name) from tbl_courses WHERE course_name = 'value from csv'> GT 0 THEN ADD <data> to TBL_ITEM using PK from TBL_COURSES ELSE CREATE ROW in TBL_COURSES WITH <data> ADD <data> to TBL_ITEM using PK from TBL_COURSES END IF
Existe-t-il un moyen de mapper les champs de mon file CSV au tbl_item (en ajoutant une ligne à tbl_courses si nécessaire?)
Fondamentalement, vous voulez commencer à penser set basé et effectuer les étapes suivantes:
Importez votre file CSV dans une table temporaire.
Insérez dans votre tableau des cours en sélectionnant dans votre table temporaire, vous pouvez également inclure vos données statiques, mais assurez-vous d'être distinct pour éviter les duplicates.
Insérez dans votre table d'éléments la sélection de votre table temporaire, y compris les tables de cours PK dépendra de vos données CSV. Si vous avez déjà l'identifiant de cours unique dans le cadre des données CSV, alors vous pouvez faire une sous-requête dans le cadre de l'insertion.
Voici un exemple de ce que j'essaie d'expliquer si cela peut aider, évidemment CourseData et itemData sont vraiment votre set de champs …
-- setup for example declare @course table (courseId int, courseData varchar(50)) declare @item table (itemId int, courseId int, itemData varchar(50)) declare @csvdata table (courseid int, coursedata varchar(50), itemid int, itemdata varchar(50)) insert into @csvdata values (1, 'a', 1, 'b'), (1, 'a', 2, 'c'), (2, 'b', 3, 'c') -- the important bit insert into @course select distinct courseId, courseData from @csvdata insert into @item select itemId, courseId, itemData from @csvdata select * from @course select * from @item
Vous ne pouvez pas effectuer une import directement de cette manière. Vous devez d'abord importer le file CSV dans une table temporaire (son nom n'a pas d'importance – il suffit d'importer en bloc tout ce qu'il contient).
Après avoir le CSV disponible dans une table relationnelle, vous pouvez exécuter n'importe quel SQL que vous voulez. Vous pouvez exécuter n'importe quel process d'import arbitraire de cette façon.
Lorsque vous avez terminé, vous pouvez supprimer la table temporaire.