4

次のクエリのセマンティクスは何ですか

UPDATE table
SET column .WRITE(NULL, NULL, NULL)

columnタイプでありVARBINARY(max)、その内容がそうでNULLない場合

簡単なテストでは、クエリがノーオペレーションであることを示しています。

--DROP TABLE [table]
CREATE TABLE [table] ([column] VARBINARY(max))
INSERT INTO [table] VALUES (0x12345678)
UPDATE [table]
SET [column] .WRITE(NULL, NULL, NULL)
SELECT * FROM [table]

実行しても、 内のデータは変更されませんcolumnただし、ドキュメントに証拠が見つからないようです。何か見落としがありますか、それともこの何もしない動作が変わる可能性はありますか?

4

1 に答える 1

8

実際にリンクされたドキュメント ( here ) を注意深く読むと、論理的.WRITE(NULL,NULL,NULL)には、列を既にある長さに切り詰めようとする必要があることを意味します。IE、事実上ノーオペレーションです。

ドキュメントからのこの抜粋のイタリック体のセクションに注意してください。

.WRITE (expression,@Offset,@Length):

column_name の値のセクションを変更することを指定します。式は、column_name の @Offset から始まる @Length 単位を置き換えます。...

expression: column_name にコピーされる値です。... expression が NULL に設定されている場合、 @Length は無視され、 column_name の値は指定された @Offset で切り捨てられます

@Offset:式が記述される column_name の値の開始点です。... @Offset が NULL の場合、更新操作は既存の column_name 値の末尾に式を追加し、@Length は無視されます。...

したがって、@Offsetが NULL の場合、列の現在の長さであるかのように扱われます。

また、expressionNULL の場合、列はその@Offset値で切り捨てられます。

したがって、両方が NULL の場合、列は現在の長さで切り捨てられます。これは、事実上何もしないことを意味します。

于 2013-05-29T19:18:13.817 に答える