在存储过程中,我试图有条件地更新字段(如下面SQL语句中的第2行)
UPDATE [some_stuff] SET
last_update = CASE WHEN val = @NewVal THEN last_update ELSE GETDATE() END,
val = @NewVal
...但是对于text / ntext字段。这样做最有效的方法是什么?它必须是单独的UPDATETEXT
声明吗?我是否必须首先额外SELECT
?
答案 0 :(得分:3)
上面的示例适用于SQL Server 2005,其中val是一个Text字段,您正在更新整个值。如果您只是替换部分字段,请在单独的语句中使用UPDATETEXT。
更好的解决方案是,如果可以更新架构,则使用VARCHAR(MAX)或NVARCHAR(MAX)列。 UPDATETEXT命令已在SQL Server的未来版本中标记为已弃用。如果您正在使用这些数据类型,则可以使用UPDATE语句中的column_name.WRITE替换部分值。
答案 1 :(得分:0)
也许这个例子不太现实,但你不能简化为:
UPDATE [some_stuff]
SET last_update = GETDATE()
WHERE val != @NewVal
案例的前半部分只是将字段设置为自身,这看起来有点无意义。