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