Sql lecture import de fichier texte

Soyez le premier à donner votre avis sur cette source.

Snippet vu 35 744 fois - Téléchargée 16 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

nicomilville
Messages postés
3498
Date d'inscription
lundi 16 juillet 2007
Statut
Membre
Dernière intervention
28 février 2014
25 -
Salut,

Pas mal ta source !

Connais tu un site ou il y est un tuto sur la création de procédures ?

a++
FENETRES
Messages postés
205
Date d'inscription
jeudi 15 juillet 2004
Statut
Membre
Dernière intervention
14 avril 2009
-
Pour une information à la source voir à l'adresse ci-dessous :

http://msdn.microsoft.com/fr-fr/library/ms188365.aspx
FENETRES
Messages postés
205
Date d'inscription
jeudi 15 juillet 2004
Statut
Membre
Dernière intervention
14 avril 2009
-
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.
lauamine
Messages postés
2
Date d'inscription
vendredi 11 avril 2008
Statut
Membre
Dernière intervention
14 mai 2009
-
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
Krayz
Messages postés
6
Date d'inscription
lundi 13 avril 2009
Statut
Membre
Dernière intervention
29 janvier 2010
-
Gros Merci

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.