【发布时间】:2012-08-02 23:49:20
【问题描述】:
如何仅使用 TSQL(例如从 SSMS 而不使用 ADO.Net 或 Linq 等任何代码)更新 BLOB 字段?
【问题讨论】:
标签: sql sql-server tsql sql-update blob
如何仅使用 TSQL(例如从 SSMS 而不使用 ADO.Net 或 Linq 等任何代码)更新 BLOB 字段?
【问题讨论】:
标签: sql sql-server tsql sql-update blob
使用 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)
对于部分更新,可以使用this MSDN article 中描述的 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)
【讨论】: