Подтвердить что ты не робот

Как вставить blob в базу данных, используя студию управления сервером sql

Как я могу легко вставить blob в поле varbinary (MAX)?

для аргумента:

Предположим, что я хочу вставить: c:\picture.png таблица является таблицей столбец mypictureblob и место recid = 1

Я уже давно занимаюсь поиском в Интернете, и я не могу найти простое решение

спасибо!

4b9b3361

Ответ 1

Вы можете вставить в поле varbinary (max) с помощью T-SQL в SQL Server Management Studio и, в частности, с помощью команды OPENROWSET.

Например:

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

Взгляните на следующую документацию для хорошего примера/прохода

Работа с большими типами значений

Обратите внимание, что путь к файлу в этом случае относится к целевому SQL-серверу, а не к вашему клиенту, выполняющему эту команду.

Ответ 2

В MSDN есть статья Работа с большими типами значений  который пытается объяснить, как работает импорт, но он может немного запутать, так как он объединяет 2 вещи. Так вот упрощенная версия и разбита на 2 части. Предположим, что простая таблица:

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

Если вы запустите (в SSMS):

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

он покажет, что результат выглядит как таблица с одним столбцом с именем BulkColumn. Вот почему вы можете использовать его в INSERT, например:

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

Остальное просто подгоняет его к вставке с большим количеством столбцов, которые могут иметь или не иметь ваши таблицы. Если вы назовете результат od, который выбирает FOO, вы можете использовать SELECT Foo.BulkColumn и ass после этих констант для других полей в вашей таблице.

Потарт, который может стать более сложным, заключается в том, как экспортировать эти данные обратно в файл, чтобы вы могли проверить, что он все еще в порядке. Если вы запустите строку cmd:

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

Он начнет скулить еще 4 "params" и даст вводящие в заблуждение значения по умолчанию (в результате чего будет изменен файл). Вы можете принять сначала один, установить 2-й и 0, а затем выбрать 3-й и 4-й, или быть явным:

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]:

Затем он спросит:

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

В следующий раз, когда вам нужно запустить его, добавьте -f C:\Test\bcp_2.fmt, и он перестанет ныть:-) Экономит много времени и печали.

Ответ 3

Существует два способа ВЫБРАТЬ BLOB с TSQL:

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

Также как:

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

Обратите внимание на имя корреляции после предложения FROM, которое является обязательным.

Затем вы можете вставить INSERT, выполнив INSERT SELECT.

Вы также можете использовать вторую версию для UPDATE, как я описал в Как обновить BLOB в SQL SERVER с помощью TSQL.

Ответ 4

Однако вы можете просто прочитать файл с диска на машине SQL-сервера:

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

чтобы увидеть его в приложении управления в шестнадцатеричной форме (Management Studio).

Итак, вы можете, например, сделать резервную копию базы данных в файл (локально на сервере), а затем загрузить ее в другое место с помощью вышеприведенного утверждения.

Ответ 5

Вам нужно сделать это из студии mgmt? Вот как мы это делаем из строки cmd:

"C:\Program Files\Microsoft SQL Server\MSSQL\Binn\TEXTCOPY.exe" /S < Сервеp > /D <DataBase> /T mytable/C mypictureblob/F "C:\picture.png" /W "где RecId =" /I

Ответ 6

Хорошо... это заняло у меня слишком много времени. Студийный инструмент sql-management просто не доходит до простых вещей, подобных этому (что я заметил раньше, когда искал, где установить тайм-аут на запросы, и это было сделано в 4 разных местах)

Я загрузил другой пакет sql editor (sql maestro в моем случае). И вот он включает редактор blob, где вы можете посмотреть на blobs и загрузить новые капли в это поле.

спасибо за ввод!