10

如何仅使用 TSQL(例如从 SSMS 而不使用 ADO.Net 或 Linq 等任何代码)更新 BLOB 字段?

4

1 回答 1

20

使用 TSQL 选择 BLOB 有两种方法:

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)

对于部分更新,可以使用此 MSDN 文章中描述的 SET .WRITE mutator,语法如下:

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

请注意,WRITE mutator 只能用于 NON-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)
于 2012-08-05T23:25:47.463 回答