Sql lecture import de fichier texte

4/5 (6 avis)

Snippet vu 39 672 fois - Téléchargée 18 fois

Contenu du snippet

Cette procédure permet le lire fichier texte comme un simple SELECT * sur une table.

Pour faire simple j'ai mis tous les champs en Nvarchar(Max)

Source / Exemple :


CREATE Procedure dbo.Read_File(@File VarChar(495),@Separator Char(1),@FirstLineColumn Bit)
AS
BEGIN
	Declare @Txt Nvarchar(max),@Req VarChar(max),@Res Nvarchar(Max)
	
	-------------------------------------
	--Lecture du fichier Texte avec Dos--
	-------------------------------------
	CREATE TABLE ##TB(Valeur nvarchar(Max))
	Set @Req='BULK INSERT ##TB FROM ''' +  @File + ''' WITH(FIRSTROW= 1,LASTROW=1,ROWTERMINATOR = ''' + CHAR(10) + ''')'
	EXEC(@Req)

	------------------------------------------
	--Création de la table temporaire ##Temp--
	------------------------------------------
	SET @Txt=(SELECT TOP 1 Valeur FROM ##TB) + @Separator	
	DROP TABLE ##TB

	IF @FirstLineColumn=0
	BEGIN
		DECLARE @Nb INT
		Set @Nb=0
		WHILE CHARINDEX(@Separator,@Txt)>0
		BEGIN
			SET @Res=ISNULL(@Res,'') + '[Column' + convert(Nvarchar,@NB) + '],'
			
			SET @Txt=SUBSTRING(@Txt,CHARINDEX(@Separator,@Txt)+1,LEN(@Txt)- CHARINDEX(@Separator,@Txt))

			SET @Nb=@Nb+1
		END
		SET @Res=LEFT(@Res,LEN(@Res)-1)+')'
	END
	ELSE
	BEGIN
		SET @Res='[' + REPLACE(@Txt,@Separator,'],[')
		SET @Res=LEFT(@Res,LEN(@Res)-2)+')'
	END
	
	SET @Req='CREATE TABLE ##Temp (' + REPLACE(@Res,']','] NVarChar(Max)') 

	EXEC(@Req)
	---------------------------------
	--Import de données dans ##Temp--
	---------------------------------
	SET @REQ='BULK INSERT ##TEMP FROM ''' +  @File + ''' WITH(FIELDTERMINATOR = ''' + @Separator + ''' , FIRSTROW= ' + CONVERT(NVARCHAR, CONVERT(INT,@FirstLineColumn)+ 1) +', ROWTERMINATOR = ''' + CHAR(10) + ''')'

	EXEC(@REQ)

	------------------------------------
	--Lecture et suppression de ##Temp--
	------------------------------------
	SELECT * FROM ##Temp

	DROP TABLE ##Temp
END

Conclusion :


Bien pratique.

A voir également

Ajouter un commentaire Commentaires
cs_karimmassi Messages postés 16 Date d'inscription dimanche 26 juin 2011 Statut Membre Dernière intervention 5 avril 2013
12 juil. 2011 à 00:14
bon source mais mal documenté.
Krayz Messages postés 6 Date d'inscription lundi 13 avril 2009 Statut Membre Dernière intervention 29 janvier 2010
7 déc. 2009 à 23:07
Gros Merci
lauamine Messages postés 2 Date d'inscription vendredi 11 avril 2008 Statut Membre Dernière intervention 14 mai 2009
11 mai 2009 à 12:37
sql soit transformé au fichier texte

je veux le code en java , en fait je réalise un générateur de données :
Protoype 1 : Création d’une base de données ayant des tables et attributs indépendants en fichier SQL ;

Protoype 2 : Géneration de la base de données avec des tables indépendantes et des contraintes sur les valeurs des attributs ;

Prototype 3 : Géneration de la base de données dans un certain ordre tenant compte de la dépendance, par exemple il faut génerer une table « Commande » qui fait référence a une table « Client » à travers un attribut « Client
j'ai besoin de vous aides
merci de votre attention
FENETRES Messages postés 196 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 14 avril 2009
24 sept. 2008 à 11:29
Pour mériter une telle note, il faudrait :
- ajouter une transaction,
- ajouter une instruction TRY...CATCH,
- gérer les caractères accentués,
- préciser que BULK INSERT, pour optimiser les performances, n'utilise pas les logs transactionnels.
FENETRES Messages postés 196 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 14 avril 2009
23 sept. 2008 à 18:22
Pour une information à la source voir à l'adresse ci-dessous :

http://msdn.microsoft.com/fr-fr/library/ms188365.aspx
Afficher les 6 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.