[SQL Server] Importer et exporter dans une table SQL des documents pdf,docx, xlsx, html
-- =============================================
-- Author: Zouhaier KHARROUBI
-- Create date: 18/05/2018
-- Description: Importer et exporter dans une table SQL des documents pdf,docx, xlsx, html
-- =============================================
CREATE TABLE [dbo].[Document]
(
[Num_Doc] [numeric](18, 0) IDENTITY(1,1) NOT NULL,
[Extension] [VARCHAR](50) NULL,
[NomFichier] [VARCHAR](200) NULL,
[Contenu_Doc] [VARBINARY](max) NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
--Importer les différents documents vers une table SQL
INSERT [dbo].[Document]([Extension] ,[NomFichier] , [Contenu_Doc] )
SELECT 'pdf', 'monfichier.pdf',T1.*
FROM OPENROWSET
(BULK 'C:\MES_FICHIERS\monfichier.pdf', SINGLE_BLOB) T1
INSERT [dbo].[Document]([Extension] ,[NomFichier] , [Contenu_Doc] )
SELECT 'html', 'test.html',T1.*
FROM OPENROWSET
(BULK 'C:\MES_FICHIERS\test.html', SINGLE_BLOB) T1
INSERT [dbo].[Document]([Extension] ,[NomFichier] , [Contenu_Doc] )
SELECT 'docx', 'monfichier.doc',T1.*
FROM OPENROWSET
(BULK 'C:\MES_FICHIERS\monfichier.docx', SINGLE_BLOB) T1
INSERT [dbo].[Document]([Extension] ,[NomFichier] , [Contenu_Doc] )
SELECT 'xlsx', 'monclasseur.xlsx',T1.*
FROM OPENROWSET
(BULK 'C:\MES_FICHIERS\monclasseur.xlsx', SINGLE_BLOB) T1
DECLARE @CheminGeneration VARCHAR(50) = 'C:\MES_FICHIERS\Backup'
, @Id_Dic BIGINT
, @HundleObjet INT
, @Donnees VARBINARY(max)
, @CheminFichier VARCHAR(max)
, @CheminRepertoire VARCHAR(max)
--Envoyer le contenu de la table Document vers la vraible de type table @Document
--Afin de pouvoir parcourir le contenu de la table document par document
DECLARE @Document TABLE
(
Id_Dic INT identity(1,1)
,[Num_Doc] VARCHAR(100)
,[NomFichier] VARCHAR(100)
,[Contenu_Doc] VARBINARY(max)
)
INSERT INTO @Document([Num_Doc] , [NomFichier],[Contenu_Doc])
SELECT [Num_Doc] , [NomFichier],[Contenu_Doc] FROM [dbo].[Document]
--Générer les documents précédemment envoyées vers la table SQL
SELECT @Id_Dic = COUNT(1) FROM @Document
WHILE @Id_Dic >= 1
BEGIN
SELECT
@Donnees = [Contenu_Doc],
@CheminFichier = @CheminGeneration + '\' +[NomFichier],
@CheminRepertoire = @CheminGeneration
FROM @Document WHERE Id_Dic = @Id_Dic
EXEC sp_OACreate'ADODB.Stream', @HundleObjet OUTPUT; -- créer une instance de l'objet
EXEC sp_OASetProperty @HundleObjet, 'Type', 1;
EXEC sp_OAMethod @HundleObjet, 'Open'; -- appeler la méthode
EXEC sp_OAMethod @HundleObjet, 'Write', NULL, @Donnees; -- appeler la méthode
EXEC sp_OAMethod @HundleObjet, 'SaveToFile', NULL, @CheminFichier, 2; -- appeler la méthode
EXEC sp_OAMethod @HundleObjet, 'Close'; -- appeler la méthode
EXEC sp_oamethod @HundleObjet,'open'
EXEC sp_OADestroy @HundleObjet; -- Fermer les ressources
print 'Document généré dans ' + @CheminFichier
--Reset the variables for next use
SELECT @Donnees = NULL
,@HundleObjet = NULL
,@CheminFichier = NULL
,@CheminRepertoire = NULL
SET @Id_Dic = @Id_Dic - 1
END