{"id":869,"date":"2013-05-09T00:29:19","date_gmt":"2013-05-08T22:29:19","guid":{"rendered":"http:\/\/www.sqlserver.fr\/blog\/?p=869"},"modified":"2026-05-02T14:30:52","modified_gmt":"2026-05-02T12:30:52","slug":"inserer-une-image-dans-sql-server","status":"publish","type":"post","link":"https:\/\/www.sqlserver.fr\/blog\/inserer-une-image-dans-sql-server\/","title":{"rendered":"Ins\u00e9rer une image dans SQL Server"},"content":{"rendered":"<p>Une petite question qui m&rsquo;a \u00e9t\u00e9 pos\u00e9e il y a quelques temps : comment stocker une image (ou tout autre document) dans une colonne de type varbinary sous SQL Server ?<!--more--><\/p>\n<p>Dans une base de donn\u00e9es, le type de donn\u00e9es varbinary(n) permet de stocker tout un ensemble de donn\u00e9es dites de type \u00ab\u00a0binaires\u00a0\u00bb. Il peut s&rsquo;agir d&rsquo;images, de documents divers (Word, Excel, &#8230;), ou de tout autre type de donn\u00e9es.<\/p>\n<p>Dans certaines applications, on rencontre des tables de param\u00e9trage contenant par exemple des images de r\u00e9f\u00e9rence, comme par exemple des ic\u00f4nes utilis\u00e9s par l&rsquo;applicatif. Et ces tables de r\u00e9f\u00e9rence on besoin d&rsquo;\u00eatre initialis\u00e9es lors de la mise en production de l&rsquo;applicatif. La question est donc : comment initialiser ces tables de r\u00e9f\u00e9rence ?<\/p>\n<p>D&rsquo;un point de vue op\u00e9rationnel, toute intervention sur une base doit \u00eatre script\u00e9e, afin de pouvoir \u00eatre r\u00e9p\u00e9t\u00e9e \u00e0 l&rsquo;identique dans tous les environnements (test, pr\u00e9-production, production). Nous allons donc chercher \u00e0 g\u00e9n\u00e9rer un script T-SQL en mesure d&rsquo;ins\u00e9rer notre fichier binaire dans une table.<\/p>\n<p>Une premi\u00e8re solution consiste \u00e0 utiliser un applicatif d\u00e9velopp\u00e9 sur mesure pour ins\u00e9rer les donn\u00e9es en base de d\u00e9veloppement, puis ensuite utiliser par exemple SSMS pour g\u00e9n\u00e9rer un script d&rsquo;insertion de cette donn\u00e9e, afin de pouvoir le faire passer dans tous les environnements.<\/p>\n<p>Une deuxi\u00e8me solution consiste \u00e0 utiliser la fonction OPENROWSET, qui permettra de \u00ab\u00a0convertir\u00a0\u00bb le fichier en expression hexad\u00e9cimale.<\/p>\n<p><a href=\"https:\/\/www.sqlserver.fr\/blog\/wp-content\/uploads\/2013\/05\/OPENROWSET.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-874\" alt=\"OPENROWSET\" src=\"https:\/\/www.sqlserver.fr\/blog\/wp-content\/uploads\/2013\/05\/OPENROWSET.png\" width=\"574\" height=\"120\" srcset=\"https:\/\/www.sqlserver.fr\/blog\/wp-content\/uploads\/2013\/05\/OPENROWSET.png 574w, https:\/\/www.sqlserver.fr\/blog\/wp-content\/uploads\/2013\/05\/OPENROWSET-300x62.png 300w\" sizes=\"auto, (max-width: 574px) 100vw, 574px\" \/><\/a>Petite remarque au vol, l&rsquo;instruction est ex\u00e9cut\u00e9e sur le serveur, et le fichier C:\\Temp\\stop.ico doit donc \u00eatre sur le serveur lui-m\u00eame. S&rsquo;il n&rsquo;y a pas la possibilit\u00e9 de positionner directement le fichier sur le serveur, un partage r\u00e9seau peut \u00eatre utilis\u00e9.<\/p>\n<p>Attention toutefois, l&rsquo;affichage est limit\u00e9 \u00e0 65536 caract\u00e8res, c&rsquo;est-\u00e0-dire des fichiers binaires de 32Ko au maximum.<\/p>\n<p>Pour les fichiers plus gros, la syntaxe ci-dessus peut \u00eatre utilis\u00e9e pour ins\u00e9rer les donn\u00e9es dans une table, sur laquelle on pourra ensuite s&rsquo;appuyer pour g\u00e9n\u00e9rer un script.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"sql\">create table TableTemporaire (Data varbinary(max))\r\ninsert into TableTemporaire (Data)\r\nSELECT * FROM OPENROWSET(BULK N'C:\\Temp\\stop.ico', SINGLE_BLOB) AS MonImage<\/pre>\n<p>D\u00e8s lors, on a une table qui contient notre donn\u00e9e, et l&rsquo;on peut ensuite g\u00e9n\u00e9rer un script via les outils de SSMS.<\/p>\n<p><a href=\"https:\/\/www.sqlserver.fr\/blog\/wp-content\/uploads\/2013\/05\/Contextuel.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-875\" alt=\"Contextuel\" src=\"https:\/\/www.sqlserver.fr\/blog\/wp-content\/uploads\/2013\/05\/Contextuel.png\" width=\"470\" height=\"381\" srcset=\"https:\/\/www.sqlserver.fr\/blog\/wp-content\/uploads\/2013\/05\/Contextuel.png 470w, https:\/\/www.sqlserver.fr\/blog\/wp-content\/uploads\/2013\/05\/Contextuel-300x243.png 300w\" sizes=\"auto, (max-width: 470px) 100vw, 470px\" \/><\/a><\/p>\n<p><a href=\"https:\/\/www.sqlserver.fr\/blog\/wp-content\/uploads\/2013\/05\/Objets.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-876\" alt=\"Objets\" src=\"https:\/\/www.sqlserver.fr\/blog\/wp-content\/uploads\/2013\/05\/Objets-620x572.png\" width=\"620\" height=\"572\" srcset=\"https:\/\/www.sqlserver.fr\/blog\/wp-content\/uploads\/2013\/05\/Objets-620x572.png 620w, https:\/\/www.sqlserver.fr\/blog\/wp-content\/uploads\/2013\/05\/Objets-300x277.png 300w, https:\/\/www.sqlserver.fr\/blog\/wp-content\/uploads\/2013\/05\/Objets.png 721w\" sizes=\"auto, (max-width: 620px) 100vw, 620px\" \/><\/a><\/p>\n<p><a href=\"https:\/\/www.sqlserver.fr\/blog\/wp-content\/uploads\/2013\/05\/Options.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-877\" alt=\"Options\" src=\"https:\/\/www.sqlserver.fr\/blog\/wp-content\/uploads\/2013\/05\/Options-620x572.png\" width=\"620\" height=\"572\" srcset=\"https:\/\/www.sqlserver.fr\/blog\/wp-content\/uploads\/2013\/05\/Options-620x572.png 620w, https:\/\/www.sqlserver.fr\/blog\/wp-content\/uploads\/2013\/05\/Options-300x277.png 300w, https:\/\/www.sqlserver.fr\/blog\/wp-content\/uploads\/2013\/05\/Options.png 721w\" sizes=\"auto, (max-width: 620px) 100vw, 620px\" \/><\/a><\/p>\n<p><a href=\"https:\/\/www.sqlserver.fr\/blog\/wp-content\/uploads\/2013\/05\/Avancees.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-878\" alt=\"Avancees\" src=\"https:\/\/www.sqlserver.fr\/blog\/wp-content\/uploads\/2013\/05\/Avancees-620x573.png\" width=\"620\" height=\"573\" srcset=\"https:\/\/www.sqlserver.fr\/blog\/wp-content\/uploads\/2013\/05\/Avancees-620x573.png 620w, https:\/\/www.sqlserver.fr\/blog\/wp-content\/uploads\/2013\/05\/Avancees-300x277.png 300w, https:\/\/www.sqlserver.fr\/blog\/wp-content\/uploads\/2013\/05\/Avancees.png 720w\" sizes=\"auto, (max-width: 620px) 100vw, 620px\" \/><\/a><\/p>\n<p>Et voil\u00e0 le r\u00e9sultat :<\/p>\n<p><a href=\"https:\/\/www.sqlserver.fr\/blog\/wp-content\/uploads\/2013\/05\/Script.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-879\" alt=\"Script\" src=\"https:\/\/www.sqlserver.fr\/blog\/wp-content\/uploads\/2013\/05\/Script-620x36.png\" width=\"620\" height=\"36\" srcset=\"https:\/\/www.sqlserver.fr\/blog\/wp-content\/uploads\/2013\/05\/Script-620x36.png 620w, https:\/\/www.sqlserver.fr\/blog\/wp-content\/uploads\/2013\/05\/Script-300x17.png 300w, https:\/\/www.sqlserver.fr\/blog\/wp-content\/uploads\/2013\/05\/Script.png 1288w\" sizes=\"auto, (max-width: 620px) 100vw, 620px\" \/><\/a><\/p>\n<p>Un petit m\u00e9lange entre les deux m\u00e9thodes \u00e9voqu\u00e9es plus haut, et on peut d\u00e9sormais prendre en charge des gros fichiers binaires (et les transformer en script deux fois plus gros !).<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Une petite question qui m&rsquo;a \u00e9t\u00e9 pos\u00e9e il y a quelques temps : comment stocker une image (ou tout autre document) dans une colonne de type varbinary sous SQL Server ?<\/p>\n","protected":false},"author":7,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-869","post","type-post","status-publish","format-standard","hentry","category-article_sql"],"_links":{"self":[{"href":"https:\/\/www.sqlserver.fr\/blog\/wp-json\/wp\/v2\/posts\/869","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.sqlserver.fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sqlserver.fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sqlserver.fr\/blog\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sqlserver.fr\/blog\/wp-json\/wp\/v2\/comments?post=869"}],"version-history":[{"count":17,"href":"https:\/\/www.sqlserver.fr\/blog\/wp-json\/wp\/v2\/posts\/869\/revisions"}],"predecessor-version":[{"id":1932,"href":"https:\/\/www.sqlserver.fr\/blog\/wp-json\/wp\/v2\/posts\/869\/revisions\/1932"}],"wp:attachment":[{"href":"https:\/\/www.sqlserver.fr\/blog\/wp-json\/wp\/v2\/media?parent=869"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sqlserver.fr\/blog\/wp-json\/wp\/v2\/categories?post=869"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sqlserver.fr\/blog\/wp-json\/wp\/v2\/tags?post=869"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}