Voici comment copier le contenu d’un fichier contenu sur un disque dur pour le stocker dans une table, Ã l’aide de la commande OPENROWSET et de son option BULK …
Supposons que nous avons la table suivante, dans laquelle nous stockons des icônes :
1 2 3 4 5 6 7 8 9 | --------------------------------- -- Nicolas SOUQUET - 26/06/2009 - --------------------------------- CREATE TABLE dbo.TbIcone ( IDIcone INT IDENTITY CONSTRAINT PK_TbIcone PRIMARY KEY, nomIcone VARCHAR(255) NOT NULL, icone VARBINARY(MAX) ) |
Et voici la procédure stockée qui va permettre de stocker des icônes stockées sur un des disques dur, simplement en passant son UNC en paramètre :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | --------------------------------- -- Nicolas SOUQUET - 26/06/2009 - --------------------------------- CREATE PROCEDURE PsStockeIcone @cheminDuFichier VARCHAR(255) AS BEGIN SET NOCOUNT ON DECLARE @SQL NVARCHAR(256), @ParamDefinition NVARCHAR(64), @nomDeFichier VARCHAR(64) SELECT @SQL = N'SELECT @fluxOUT = BulkColumn FROM OPENROWSET(BULK N''' + @cheminDuFichier + ''', SINGLE_BLOB) AS TMP', @ParamDefinition = N'@fluxOUT VARBINARY(MAX) OUTPUT', @nomDeFichier = RIGHT(@cheminDuFichier, CHARINDEX('\', REVERSE(@cheminDuFichier)) - 1) -- Récupère le fichier sous la forme d'une valeur binaire DECLARE @fluxFichier VARBINARY(MAX) EXEC sp_executesql @SQL, @ParamDefinition, @fluxFichier OUTPUT -- Stocke le flux dans la table INSERT INTO dbo.TbIcone ( nomIcone, icone ) VALUES ( @nomDeFichier, @fluxFichier ) END |
Je souhaite stocker l’image suivante (C:\SQLServer2008Dark.jpg) :
1 2 3 4 5 6 7 8 | --------------------------------- -- Nicolas SOUQUET - 26/06/2009 - --------------------------------- EXEC dbo.PsStockeIcone 'C:\SQLServer2008Dark.jpg' GO SELECT IDIcone, nomIcone, icone FROM dbo.TbIcone |
Notons que cette procédure fonctionne dès SQL Server 2005.
ElSuket