Как обновить BLOB в SQL SERVER с помощью TSQL

Как обновить поле BLOB только с использованием TSQL (например, из SSMS и без использования какого-либо кода, такого как ADO.Net или Linq)?

1 ответ

Решение

Есть два способа ВЫБРАТЬ 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, которое является обязательным.

Вторая версия может использоваться для ОБНОВЛЕНИЯ, как в следующем примере:

UPDATE MyTable 
SET blobField = 
   (SELECT BulkColumn FROM OPENROWSET (BULK 'C:\Test\Test1.pdf', SINGLE_BLOB) a) 
WHERE (CriteriaField = @criteria)

Для частичных обновлений можно использовать мутатор SET .WRITE, как описано в этой статье MSDN, вот синтаксис:

UPDATE MyTable SET BlobField .WRITE (expression, @offset, @length) WHERE (CriteriaField = @criteria)

Обратите внимание, что мутатор WRITE может использоваться только для полей, не равных NULL.

Фактически это также может быть использовано для полного обновления (если столбец не содержит NULL), путем установки @offset в 0 и @length в NULL (или в фактическую длину), как в следующем примере:

DECLARE @tmp VARBINARY(MAX) --Change to the correct datatype here
SELECT @tmp = BulkColumn FROM OPENROWSET (BULK 'C:\Test\Test1.pdf', SINGLE_BLOB) a
UPDATE MyTable SET BlobField .WRITE (@tmp, 0, NULL) WHERE (CriteriaField = @criteria)
Другие вопросы по тегам