octobre
2011
Une procédure d’import de fichier de données dans une table
–> Nouvelle version de la procédure
/*================================================================================================
–Description : Import de fichier (.csv par exemple) dans une table à l'aide de BULK INSERT
–Note : la table de destination à même nombre de colonnes que le fichier à importer et dans le même ordre !
– Si le nombre de colonnes dans le fichier est différent du celui de la table de destination, il est possible
– d'utiliser une table intermédiaire (temporaire) avant le chargement dans la table destination
–Mise jour le 11/10/2011
–Auteur : Etienne ZINZINDOHOUE
–Exemple d'utilisation : EXEC P_Import_File_to_Table N'E:\test.csv', N'MaBase.dbo.testbulk', N','
================================================================================================*/
CREATE PROCEDURE P_Import_File_to_Table
@EmplacementFichier nvarchar(255), @BaseSchemaTableName nvarchar(255),@separateur nchar(1)
AS
BEGIN
SET NOCOUNT ON
– Vérifier l'existence du fichier à importer
DECLARE @FileOK INT,@TableOK INT,@BULK NVARCHAR(max)
EXEC xp_fileexist @EmplacementFichier, @FileOK OUTPUT
IF(@FileOK = 0)
BEGIN
SELECT 'Le fichier importer ' + @EmplacementFichier + ' n''existe pas !'
RETURN
END
– Vérifier la présence de la table de destination
SELECT @TableOK = COUNT(*)
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_CATALOG +'.'+ TABLE_SCHEMA +'.'+TABLE_NAME = + @BaseSchemaTableName
IF(@TableOK = 0)
BEGIN
SELECT 'La table de destination ' + @BaseSchemaTableName + ' n''existe pas !'
RETURN
END
–Import des données
BEGIN
SET @BULK = N'BULK INSERT ' + @BaseSchemaTableName + ' FROM ' +''''+ @EmplacementFichier +''''+ ' WITH (FIELDTERMINATOR = '''+@separateur+''', ROWTERMINATOR = ''\n'', FIRSTROW = 1)'
–SELECT @BULK
EXEC sp_executesql @BULK
END
END
–> L’ancienne version de la procédure
/*================================================================================================
–Description : Import de fichier (.csv par exemple) dans une table l'aide de BULK INSERT
–Auteur : Etienne ZINZINDOHOUE
–Exemple d’utilisation :
EXEC P_Import_File_to_Table N'E:\test.csv', N'MaBase.dbo.testbulk', N','
================================================================================================*/
CREATE PROCEDURE P_Import_File_to_Table
@EmplacementFichier nvarchar(255), @BaseSchemaTableName nvarchar(255),@separateur nchar(1)
AS
BEGIN
SET NOCOUNT ON
– Vérifier l'existence du fichier à importer
DECLARE @ErreurTable VARCHAR(255)
DECLARE @T_file_exists TABLE
(
file_exists bit
, file_is_a_directory bit
, parent_directory_exists bit
)
INSERT @T_file_exists
EXEC xp_fileexist @EmplacementFichier
IF EXISTS
(
SELECT file_exists
FROM @T_file_exists
WHERE file_exists = 0
)
BEGIN
RAISERROR('Le fichier "%s" n''existe pas. Vérifier d''abord l''existence du fichier que vous voulez importer.', 16, 1, @EmplacementFichier)
RETURN
END
– Vérifier la présence de la table de destination
IF EXISTS
(
SELECT COUNT(*)
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_CATALOG +'.'+ TABLE_SCHEMA +'.'+TABLE_NAME = + @BaseSchemaTableName
HAVING COUNT(*) = 0
)
BEGIN
SET @ErreurTable = 'La table ' + @BaseSchemaTableName + ' n''existe pas !'
RAISERROR(@ErreurTable, 16, 1, @BaseSchemaTableName)
RETURN
END
DECLARE @bulk nvarchar(1024)
BEGIN
SET @bulk = N'BULK INSERT ' + @BaseSchemaTableName + ' FROM ' +''''+ @EmplacementFichier +''''+ ' WITH (FIELDTERMINATOR = '''+@separateur+''', ROWTERMINATOR = ''\n'', FIRSTROW = 1)'
–PRINT @bulk
EXEC(@bulk)
END
END