Importer un fichier texte dans sql Server
J'ai lu un fichier texte avec l'essentiel de la syntaxe, mais après que j'ai trouvé un autre problème: Dans mon fichier texte qu'il a le même en-tête et des détails si mon problème maintenant est de savoir comment puis-je mettre la tête dans un table1
et le détail dans un table2
?
Autre chose que j'ai créer juste un field1
pour mettre toutes mes lignes (en-tête et de détail), mais ils ont FIELDTERMINATOR = ‘|’
, mais l'en-tête il a sept champs et les détails, il y a onze champs c'est un autre problème car je ne peux pas créer un tableau avec les champs exacts de mettre mes détail et en-tête.
Ce un exemple de fichiers en texte je suis de lecture:
RH|001580/06|RG|11/01/2013 12:00|BG|3573|001580
IL|001580/01|1|00147066||1200|852.3|830.3|1.35|UNIDAD|0|31/12/2014
00:00
IL|001580/02|1|00147066||200|852.3|830.3|1.35|UNIDAD|1|31/12/2014
00:00
IL|001580/03|1|00147066||100|852.3|830.3|1.35|UNIDAD|55|31/12/2014
00:00
IL|001580/04|2|00254276||200|852.3|830.3|1.35|UNIDAD|0|31/12/2014
00:00
IL|001580/05|3|00305359||1700|852.3|830.3|1.35|UNIDAD|0|31/12/2014
00:00
IL|001580/06|3|00305359||300|852.3|830.3|1.35|UNIDAD|1|31/12/2014
00:00
C'est la requête que j'ai...
CREATE TABLE #temp
(
campo1 VARCHAR(max)
)
BULK INSERT #temp
FROM ”
WITH
(
FIELDTERMINATOR = ‘|’,
ROWTERMINATOR = ‘\n’
)
Cette sapins de requête c'est pour l'en-tête
SELECT *
FROM #temp
WHERE SUBSTRING(campo1,1,2) = ‘HR’
Cette sapins de requête c'est pour le détail
SELECT *
FROM #temp
WHERE SUBSTRING(campo1,1,2) = ‘IT’
Comment puis-je séparer les champs de l'en-tête et le détail?
- Il est très difficile de comprendre ce que vous êtes en train de demander. Êtes-vous en train de séparer les chaînes en plusieurs valeurs et de les insérer dans des tableaux?
- Yeap je sais, c'est genre difficile jusqu'à ce que, pour moi, de comprendre comment je peux le faire... mais j'ai finalement eu la réponse... merci d'essayer de m'aider.
Vous devez vous connecter pour publier un commentaire.
Il y a (au moins) deux options:
BULK INSERT
consolidés pour les charger dans deux tables différentesPersonnellement, je utiliser l'option 1, il est beaucoup plus facile. Et il n'y a aucune raison pour charger les données dans une table temporaire, je voudrais créer une table permanente (ou tables) juste pour le chargement de ces données. C'est beaucoup plus facile de travailler avec.
Merci pour les conseils pour Pondlife, j'ai eu la réponse à ma propre question.
Ici nous allons;
Bien comme nous le savons, j'ai ce fichier texte dans le même temps, a la tête et le détail
J'ai donc besoin de:
Pour la Première Étape, j'ai créer une table, puis-je utiliser le Sql BulkInsert
j'ai eu quelque chose comme cela.
Nous voyons que les lignes qu'il a des délimiteurs( | ), cela signifie que les champs de chaque table (RH - d'en-Tête, C' - Détails)
Puis pour ma deuxième et la troisième étape, j'ai besoin d'insérer les lignes sur chaque table, mais aussi j'ai besoin de séparer chacun des champs de chaque ligne, j'ai donc créer une procédure qui reçoivent une chaîne et délimiteur et de retourner un tableau avec chaque domaine de ma chaîne, j'ai créé le champs dynamiquement.
Si vous voulez créer la procédure, vous avez besoin pour exécuter ce premier
SET QUOTED_IDENTIFIER OFF
Ensuite, vous pouvez le créer.
Si vous voyez j'ai fait un commentaire les trois premières lignes pour exécuter la procédure et vous pouvez obtenir quelque chose comme ceci
Eh bien, nous avons pas fini encore, on peut lire le fichier, et nous créons de la procédure de retour des champs, et maintenant nous avons besoin d'insérer dans chaque tableau, pour cela j'ai créer deux temp table avec les champs statiques parce que je sais que les champs de chaque table, puis créer Curseur pour lire chaque ligne sur mon #ImporData table.
Après que si vous placez toutes les pièces sur la même requête que vous avez obtenu cela.
Que j'ai besoin.
Encore une fois merci Pondlife pour me donner des conseils pour la scission.