Sql lecture import de fichier texte

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

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.