Как вставить блоб в базу данных с помощью студии управления SQL-сервером

Как полное включая все один пакет, Visual Studio 2008 является лучшим IDE для разработки C++ с Windows

48
задан Dale K 19 March 2019 в 22:20
поделиться

4 ответа

Вы можете вставить в поле 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, а не к вашему клиенту, выполняющему эту команду.

64
ответ дан 26 November 2019 в 18:47
поделиться

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

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

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

0
ответ дан 26 November 2019 в 18:47
поделиться

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

"C: \ Program Files \ Microsoft SQL Server \ MSSQL \ Binn \ TEXTCOPY.exe" / S / D / T mytable / C mypictureblob / F " C: \ picture.png "/ W", где RecId = "/ I

1
ответ дан 26 November 2019 в 18:47
поделиться

В 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) AS X

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

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

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

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

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

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

Введите тип хранения файла для поля Data [varbinary(max)]:
. Введите длину префикса поля Данные [8]: 0
Введите длину поля Данные [0]:
Введите терминатор поля [none]:

Затем появится вопрос:

Хотите ли вы сохранить информацию этого формата в файл? [Y/n] y
Имя файла хоста [bcp.fmt]: C:\Test\bcp_2.fmt

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

15
ответ дан 26 November 2019 в 18:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: