[SQL Server] Corriger le format d'un fichier CSV
-- =============================================
-- Author : Zouhaier KHARROUBI
-- Create date: 16/03/2016
-- Description: Cette procedure permet de corriger le format d'un fichier CSV
-- Exemple : Le séparateur du fichier CSV est la virgule ","
-- La présence de la virgule dans une chaine de caractère déformate le format du fichier CSV
-- La procédure permet de remplacer la virgule présente dans les chaines de caractères par des points "."
-- =============================================
--1 Creer la table SAS_FichierCSV
CREATE TABLE [dbo].[SAS_FichierCSV](
[Num_Lig] [int] IDENTITY(1,1) NOT NULL,
[Colonne] [nvarchar](max) NULL
) ON [PRIMARY]
--2 Via SSIS remonter le contenu du fichier CSV vers la table SAS_FichierCSV.
-- Remonter tout le contenu du fichier CSV même la première ligne qi contient les liste des colonnes
-- La virgule est le séparateur de colonnes dans le fichier CSV
--3 Corriger le fichier CSV en exécutant la procédure stockée usp_Corriger_FichierCSV
-- Cette procédure permet de remplacer dans les chaines de caractères la virgule par .
--4 Via SSIS remonter le contenu de la table SAS_FichierCSV vers un fichier CSV
-- Remonter que le champ Colonne. Ne pas remonter la colonne Num_Lig
CREATE PROCEDURE [dbo].[usp_CorrigerFormat_FichierCSV]
-- Add the parameters for the stored procedure here
@Separateur CHAR(1)=','
,@Remplacement_separateur CHAR(1)='.'
,@Identificateur_Texte CHAR(1)='"'
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
DECLARE @chaine AS NVARCHAR(MAX)
,@chaine_remplacer AS NVARCHAR(MAX)
,@chaine_origine AS NVARCHAR(MAX)
,@debut AS INTEGER
,@fin AS INTEGER
,@taille AS INTEGER
,@Nbre_Lig AS INTEGER
,@Num_Lig AS INTEGER
SELECT @Nbre_Lig = COUNT(*) FROM dbo.SAS_FichierCSV
SELECT @Num_Lig = 1
WHILE @Num_Lig <= @Nbre_Lig
BEGIN
SELECT @chaine = Colonne FROM dbo.SAS_FichierCSV WHERE Num_Lig=@Num_Lig
SELECT @taille = LEN(@chaine)
SELECT @debut = CHARINDEX(@Identificateur_Texte,@chaine,0)
SELECT @fin = CHARINDEX(@Identificateur_Texte,@chaine,@debut + 1)
WHILE @fin<= @taille and @fin<>0
BEGIN
SELECT @chaine_origine = SUBSTRING(@chaine,@debut,(@fin - @debut) + 1 )
SELECT @chaine_remplacer = @chaine_origine
SELECT @chaine_remplacer = REPLACE(@chaine_remplacer,@separateur , @Remplacement_separateur )
SELECT @chaine = REPLACE(@chaine,@chaine_origine, @chaine_remplacer)
SELECT @debut = CHARINDEX(@Identificateur_Texte,@chaine,@fin+1)
IF @debut<>0
BEGIN
SELECT @fin = CHARINDEX(@Identificateur_Texte,@chaine,@debut + 1)
END
ELSE
BEGIN
SELECT @fin = 0
END
END
UPDATE dbo.SAS_FichierCSV
SET
Colonne = @chaine
WHERE Num_Lig = @Num_Lig
SELECT @Num_Lig = @Num_Lig + 1
END
END