[SQL Server] Importer et exporter dans une table SQL des documents pdf,docx, xlsx, html

  • Imprimer

-- =============================================

-- 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