krl*_*mlr 4 t-sql sql-server varbinary sql-server-2008 varbinarymax
以下查询的语义是什么?
UPDATE table
SET column .WRITE(NULL, NULL, NULL)
Run Code Online (Sandbox Code Playgroud)
如果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]
Run Code Online (Sandbox Code Playgroud)
执行它不会改变数据column.但是,我似乎无法在文档中找到证据.我是否忽略了某些事情,或者这种无操作行为是否可能改变?
实际上,仔细阅读与(此处)链接的文档逻辑上意味着.WRITE(NULL,NULL,NULL)应该尝试将列截断为已经存在的长度.IE,实际上是一个无操作.
请注意Doc中此提取的斜体部分:
.WRITE (expression,@Offset,@Length):指定要修改column_name值的一部分.expression从column_name的@Offset开始替换@Length单位....
expression:是复制到column_name的值.... 如果expression设置为NULL,则忽略@Length,并且在指定的@Offset处截断column_name中的值.
@Offset:是写入表达式的column_name值的起始点.... 如果@Offset为NULL,则更新操作会在现有column_name值的末尾附加表达式,并忽略@Length....
因此,如果@Offset为NULL,则将其视为列的当前长度.
并且,如果expression为NULL,则在该@Offset值处截断该列.
因此,如果两者都为NULL,则以当前长度截断列.我认为这意味着它实际上什么都不做.
| 归档时间: |
|
| 查看次数: |
5834 次 |
| 最近记录: |