10

TSQL のみを使用して (たとえば、ADO.Net や Linq などのコードを使用せずに SSMS から) BLOB フィールドを更新するにはどうすればよいですか?

4

1 に答える 1

20

TSQL で BLOB を選択するには、次の 2 つの方法があります。

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

としても:

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

FROM 句の後の相関名に注意してください。これは必須です。

2 番目のバージョンは、次の例のように UPDATE に使用できます。

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 フィールドでのみ使用できることに注意してください。

実際、次の例のように、@offset を 0 に、@length を NULL (または実際の長さ) に設定することにより、これを使用して完全な更新 (列に 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 に答える