janvier
2011
Lorsqu’on met en place un automate d’import/export de fichier (fichier de campagne d’appels sortants par exemple), on a besoin de :
–> tester l’existence du fichier d’import/export
–> faire l’opération d’import/export (pour ça j’utilise l’utilitaire BCP)
–> déplacer/copier/supprimer/renommer le fichier dans le repertoire d’archivage
Voici des procédures stockées qui permettent de déplacer/copier/supprimer ces fichiers de données à l’aide du T-SQL.
–> Déplacer un fichier l’aide de T-SQL
/*************************************************************************
–Description : Déplacer un fichier l'aide de T-SQL
–Auteur : Etienne ZINZINDOHOUE
–Exemple d'utilisation :
EXEC P_move_file N’C:\monfichier.txt',N'E:\Archive\'
—————
Pré-requis
—————
–> Activer les options avancées
EXEC sp_configure 'show advanced options', 1
GO
RECONFIGURE
GO
–> configurer xp_cmdshell
EXEC sp_configure 'xp_cmdshell', 1
GO
RECONFIGURE
*************************************************************************/
CREATE PROCEDURE [dbo].[P_move_file]
@File nvarchar(255), @RepDestination nvarchar(255)
AS
BEGIN
SET NOCOUNT ON
–> Tester l'existence du fichier à déplacer
DECLARE @Is_Directory_Or_File_Exists TABLE
(
file_exists bit
, file_is_a_directory bit
, parent_directory_exists bit
)
INSERT @Is_Directory_Or_File_Exists
EXEC xp_fileexist @File
IF EXISTS
(
SELECT file_exists
FROM @Is_Directory_Or_File_Exists
WHERE file_exists = 0
)
BEGIN
RAISERROR('Le fichier à déplacer "%s" n''existe pas. ', 16, 1, @File)
RETURN
END
–> Tester si le repertoire de destination est non NULL
IF @RepDestination IS NULL OR
@RepDestination = N''
BEGIN
RAISERROR('Renseigner le repertoire de destinantion. Ce paramtre ne peut pas être NULL',16,1)
RETURN
END
–> Ajouter un backslash au repertoire de destination s'il en manque
IF SUBSTRING(@RepDestination, LEN(@RepDestination), 1) <> N'\'
BEGIN
SELECT @RepDestination = @RepDestination + N'\'
END
–> Tester l'existence du repertoire de destination
DELETE @Is_Directory_Or_File_Exists
INSERT @Is_Directory_Or_File_Exists
EXEC xp_fileexist @RepDestination
IF EXISTS
(
SELECT file_exists
FROM @Is_Directory_Or_File_Exists
WHERE file_is_a_directory = 0
)
BEGIN
RAISERROR('Le repertoire de destination "%s" n''existe pas. ', 16, 1, @RepDestination)
RETURN
END
DECLARE @CMD nvarchar (4000)
SET @CMD = 'move /y ' + @File + ' ' + @RepDestination
–PRINT @CMD
EXEC master..xp_cmdshell @CMD
END
–> Copier un fichier l’aide de T-SQL
/*************************************************************************
–Description : Copier un fichier l'aide de T-SQL
–Auteur : Etienne ZINZINDOHOUE
–Exemple d'utilisation :
EXEC P_copy_file N'E:\Archive\monfichier.txt' , N'c:\'
—————
Pr-requis
—————
–> Activer les options avances
EXEC sp_configure 'show advanced options', 1
GO
RECONFIGURE
GO
–> configurer xp_cmdshell
EXEC sp_configure 'xp_cmdshell', 1
GO
RECONFIGURE
*************************************************************************/
CREATE PROCEDURE [dbo].[P_copy_file]
@File nvarchar(255), @RepDestination nvarchar(255)
AS
BEGIN
SET NOCOUNT ON
–> Vérifier l'existence du fichier à copier
DECLARE @Is_Directory_Or_File_Exists TABLE
(
file_exists bit
, file_is_a_directory bit
, parent_directory_exists bit
)
INSERT @Is_Directory_Or_File_Exists
EXEC xp_fileexist @File
IF EXISTS
(
SELECT file_exists
FROM @Is_Directory_Or_File_Exists
WHERE file_exists = 0
)
BEGIN
RAISERROR('Le fichier copier "%s" n''existe pas. ', 16, 1, @file)
RETURN
END
–> Tester si le repertoire de destination est non NULL
IF @RepDestination IS NULL OR
@RepDestination = N''
BEGIN
RAISERROR('Renseigner le repertoire de destinantion. Ce paramtre ne peut pas tre NULL',16,1)
RETURN
END
–> Ajouter un backslash au repertoire de destination s'il en manque
IF SUBSTRING(@RepDestination, LEN(@RepDestination), 1) <> N'\'
BEGIN
SELECT @RepDestination = @RepDestination + N'\'
END
–> Vérifier l'existence du repertoire de destination
DELETE @Is_Directory_Or_File_Exists
INSERT @Is_Directory_Or_File_Exists
EXEC xp_fileexist @RepDestination
IF EXISTS
(
SELECT file_exists
FROM @Is_Directory_Or_File_Exists
WHERE file_is_a_directory = 0
)
BEGIN
RAISERROR('Le repertoire de destination "%s" n''existe pas. ', 16, 1, @RepDestination)
RETURN
END
DECLARE @CMD nvarchar (4000)
SET @CMD = 'xcopy /y ' + @File + ' ' + @RepDestination
–PRINT @CMD
EXEC master..xp_cmdshell @CMD
END
–> Supprimer un fichier l’aide de T-SQL
/*************************************************************************
–Description : Supprimer un fichier l'aide de T-SQL
–Auteur : Etienne ZINZINDOHOUE
–Exemple d'utilisation :
EXEC P_delete_file N'E:\Archive\monfichier.txt'
—————
Pr-requis
—————
–> Activ les options avances
EXEC sp_configure 'show advanced options', 1
GO
RECONFIGURE
GO
–> configur xp_cmdshell
EXEC sp_configure 'xp_cmdshell', 1
GO
RECONFIGURE
*************************************************************************/
CREATE PROCEDURE [dbo].[P_delete_file]
@File nvarchar(255)
AS
BEGIN
SET NOCOUNT ON
–> Vérifier l'existence du fichier à supprimer
DECLARE @Is_Directory_Or_File_Exists TABLE
(
file_exists bit
, file_is_a_directory bit
, parent_directory_exists bit
)
INSERT @Is_Directory_Or_File_Exists
EXEC xp_fileexist @File
IF EXISTS
(
SELECT file_exists
FROM @Is_Directory_Or_File_Exists
WHERE file_exists = 0
)
BEGIN
RAISERROR('Le fichier à supprimer "%s" n''existe pas. ', 16, 1, @File)
RETURN
END
DECLARE @CMD nvarchar (4000)
SET @CMD = 'del ' + @File
–PRINT @CMD
EXEC master..xp_cmdshell @CMD
END
———————————————————
Etienne ZINZINDOHOUE
———————————————————