【发布时间】:2013-05-19 21:18:27
【问题描述】:
以下查询的语义是什么
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 中的数据。但是,我似乎无法在documentation 中找到证据。我是否忽略了某些事情,或者这种无操作行为可能会改变?
【问题讨论】:
-
“无操作”对您意味着什么?您的语法不正确,如您链接到的文档所示(请参阅“更新大对象数据类型”下的示例)。这对我有用:
update dbo.Mytable set MyColumn.Write(null, null, null) -
@Pondlife:谢谢,已编辑。它也适用于我,但这种行为是否记录在案?
-
我不知道你在问什么:什么是“这种行为”?参数已记录在案,并且注释说您不能将值设置为 NULL 或使用
write更新 NULL 列值。听起来您看到了一些您不期望或不理解的东西,但由于您没有显示任何查询结果或输出,我不确定有人能告诉您什么。如果您发布了一个完整的工作示例,该示例准确地显示了您所询问的行为,那么有人可能能够澄清它。 -
@krlmlr:实际上,您链接到的文档在逻辑上暗示
.WRITE(NULL,NULL,NULL)将尝试将列截断到它已经存在的长度。即,实际上是无操作。 -
@RBarryYoung:愿意在答案中详细说明这一点吗?我很乐意为合乎逻辑的解释奖励赏金:-)
标签: sql-server sql-server-2008 tsql varbinary varbinarymax