50 votes

Comment insérer un blob dans une base de données à l'aide de SQL Server Management Studio

Comment puis-je insérer facilement un objet blob dans un varbinary(MAX) champ?

pour l'argument souci:

assumer 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 pour un certain temps et je ne peux pas trouver une solution simple

merci!

66voto

John Sansom Points 20087

Vous pouvez insérer dans un varbinary(max) champ à l'aide de T-SQL dans SQL Server Management Studio et en particulier à l'aide de la fonction OPENROWSET de commande.

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 oeil à la documentation suivante pour un bon exemple/procédure pas à pas

Travailler Avec Les Types De Valeur Élevée

15voto

ZXX Points 3216

MSDN a un article qui Travaille Avec de Grands Types de Valeur qui tente d'expliquer comment importer des œuvres, mais il peut être un peu déroutant, car il n'a que 2 choses ensemble. Donc voici une version simplifiée et cassé en 2 parties. Supposons tableau simple:

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 (dans SSMS):

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

il va montrer que le résultat ressemble à une table avec une colonne nommée BulkColumn. C'est pourquoi vous pouvez l'utiliser dans les INSÉRER comme:

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

Le reste est juste à côté d'elle en insertion avec plus de colonnes de votre tableau peut ou peut ne pas avoir. Si vous nommez le résultat od que select FOO, alors vous pouvez utiliser SELECT Foo.BulkColumn et le cul après que les constantes pour les autres champs de votre table.

Le poart qui peut obtenir plus délicat est de savoir comment exporter ces données dans un fichier de sorte que vous pouvez vérifier que c'est toujours OK. Si vous exécutez sur la ligne de cmd:

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

Il va commencer à pleurnicher pour 4 supplémentaires "params" et donnera trompeuse par défaut (whihc entraînera le fichier modifié). Vous pouvez accepter première, définir la 2e à 0 puis assept 3ème et 4ème, ou d'être explicite:

Enter the file storage type of field Data [varbinary(max)]:
Enter prefix-length of field Data [8]: 0
Enter length of field Data [0]:
Enter field terminator [none]:

Puis il vous demande:

Do you want to save this format information in a file? [Y/n] y
Host filename [bcp.fmt]: C:\Test\bcp_2.fmt

La prochaine fois, vous devez l'exécuter add-f C:\Test\bcp_2.fmt et il va arrêter de se plaindre :-) Permet d'économiser beaucoup de temps et de chagrin.

8voto

yo hal Points 1949

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

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

Vous pouvez alors cette INSÉRER, par 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 UNE GOUTTE Dans SQL SERVER à l'Aide de TSQL .

2voto

pbies Points 233

Cependant, vous pouvez tout simplement lire un fichier à partir du disque sur l'ordinateur SQL server:

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

à voir dans la gestion de la demande en format hexadecimal (Management Studio).

Ainsi, vous pouvez, par exemple, la sauvegarde de la base de données de fichier (localement sur le serveur), puis de le télécharger à l'autre endroit par la déclaration ci-dessus.

1voto

cagreen Points 1309

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

"C:\Program Files\Microsoft SQL Server\MSSQL\Binn\TEXTCOPY.exe" /S < Server> /D < Base de données> /T mytable /C mypictureblob /F "C:\picture.png" /W"où RecId=" /I

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X