Comment insérer un blob dans une base de données en utilisant sql server management studio

Comment insérer facilement un blob dans un champ varbinaire(MAX)?

pour l'argument:

supposons que la chose que je veux insérer est: c:picture.png la table est mytable la colonne est mypictureblob et l'endroit est recid=1

j'ai cherché sur Google pendant un certain temps et je ne peux pas trouver une solution simple

merci!

45
demandé sur Toad 2009-10-29 16:12:38

6 réponses

vous pouvez insérer dans un champ varbinary(max) en utilisant T-SQL dans SQL Server Management Studio et en particulier en utilisant le commmand OPENROWSET.

par exemple:

INSERT Production.ProductPhoto 
(
    ThumbnailPhoto, 
    ThumbnailPhotoFilePath, 
    LargePhoto, 
    LargePhotoFilePath
)
SELECT ThumbnailPhoto.*, null, null, N'tricycle_pink.gif'
FROM OPENROWSET 
    (BULK 'c:\images\tricycle.jpg', SINGLE_BLOB) ThumbnailPhoto

jetez un coup d'oeil à la documentation suivante pour un bon exemple/visite

Travail Avec Des Types De Grande Valeur

notez que le chemin du fichier dans ce cas est relatif au serveur SQL visé et pas votre client qui dirige cette commande.

60
répondu John Sansom 2014-10-22 00:39:56

MSDN a un article travailler avec des Types de grande valeur , qui essaie d'expliquer comment les pièces d'importation fonctionnent, mais il peut devenir un peu confus car il fait 2 choses simultanément.

Voici une version simplifiée, divisée en 2 parties. Supposons la table simple suivante:

CREATE TABLE [Thumbnail](
   [Id]        [int] IDENTITY(1,1) NOT NULL,
   [Data]      [varbinary](max) NULL
CONSTRAINT [PK_Thumbnail] PRIMARY KEY CLUSTERED 
(
[Id] ASC
) ) ON [PRIMARY]

si vous exécutez (en SSMS):

SELECT * FROM OPENROWSET (BULK 'C:\Test\TestPic1.jpg', SINGLE_BLOB) AS X

il montrera, que le résultat ressemble à une table avec une colonne nommée BulkColumn . C'est pourquoi vous pouvez L'utiliser dans INSERT comme:

INSERT [Thumbnail] ( Data )
SELECT * FROM OPENROWSET (BULK 'C:\Test\TestPic1.jpg', SINGLE_BLOB) AS X

le reste est juste l'insérer dans un encart avec plus de colonnes, que votre tableau peut ou ne peut pas avoir. Si vous nommez le résultat de cela select FOO alors vous pouvez utiliser SELECT Foo.BulkColumn et as après que les constantes pour d'autres champs dans votre table.

la partie qui peut devenir plus délicate est de savoir comment exporter ces données dans un fichier afin que vous puissiez vérifier que c'est toujours OK. Si vous l'exécutez sur la ligne cmd:

bcp "select Data from B2B.dbo.Thumbnail where Id=1" 
queryout D:\T\TestImage1_out2.dds -T -L 1 

il va commencer à gémir pour 4" params " supplémentaires et donnera des valeurs par défaut trompeuses (qui aboutira à un fichier modifié). Vous pouvez accepter le premier, définir la 2e à 0 puis assept 3ème et 4ème, ou d'être explicite:

entrer le type de fichier de stockage de données de terrain [varbinary (max)]:

Entrez le préfixe-longueur des données du champ [8]: 0

Entrer la longueur des données de champ [0]:

Entrez le nom du champ terminator [aucun]:

puis il demandera:

voulez-vous sauvegarder ce format dans un fichier? [O / n] O

Accueil filename [pca.fmt]: C:\Test\bcp_2.fmt

la prochaine fois que vous devez l'exécuter ajouter -f C:\Test\bcp_2.fmt et il cessera de geindre :-) Ça fait gagner du temps et du chagrin.

14
répondu ZXX 2018-09-26 03:07:43

il y a deux façons de sélectionner un BLOB avec TSQL:

SELECT * FROM OPENROWSET (BULK 'C:\Test\Test1.pdf', SINGLE_BLOB) a

ainsi que:

SELECT BulkColumn FROM OPENROWSET (BULK 'C:\Test\Test1.pdf', SINGLE_BLOB) a

noter le nom de corrélation après la clause FROM, qui est obligatoire.

vous pouvez ensuite insérer ceci en faisant un INSERT SELECT.

vous pouvez également utiliser la deuxième version pour faire une mise à jour comme je l'ai décrit dans comment mettre à jour un BLOB dans SQL SERVER en utilisant TSQL .

6
répondu yoel halb 2017-05-23 11:33:24

cependant, vous pouvez simplement lire un fichier à partir du disque sur la machine de serveur SQL:

select * from openrowset (bulk 'c:\path\filename.ext',single_blob) a

pour le voir dans l'application de gestion en forme d'hexagone (Studio de gestion).

ainsi, vous pouvez, par exemple, sauvegarder la base de données pour le fichier (localement sur le serveur) et ensuite le télécharger à un autre endroit par la déclaration ci-dessus.

2
répondu pbies 2012-11-13 22:10:29

avez-vous besoin de le faire à partir de mgmt studio? Voici comment nous le faisons à partir de la ligne cmd:

" C:\Program fichiers\Microsoft SQL Server\MSSQL\Binn\TEXTCOPY.exe" / S < Server> /D < DataBase> / t mytable /c mypictureblob / F "C:\picture.png" / W "où RecId=" / i

1
répondu cagreen 2009-10-29 13:36:18

Ok... ce qui m'a pris beaucoup trop de temps. L'outil sql-management studio n'est tout simplement pas à la hauteur de choses simples comme celles-ci (que j'ai déjà remarquées en cherchant où régler le délai sur les requêtes, et il a été fait dans 4 endroits différents)

j'ai téléchargé un autre paquet d'éditeur sql (sql maestro dans mon cas). Et voici il inclut un éditeur de blob où vous pouvez regarder les blobs, et charger de nouveaux blobs dans ce domaine.

merci pour l'entrée!

0
répondu Toad 2009-10-29 14:49:21