如何有条件地更新SQL中的text / ntext字段?

时间:2009-10-07 03:02:21

标签: sql sql-server tsql sql-update

在存储过程中,我试图有条件地更新字段(如下面SQL语句中的第2行)

UPDATE [some_stuff] SET
  last_update = CASE WHEN val = @NewVal THEN last_update ELSE GETDATE() END,
  val = @NewVal

...但是对于text / ntext字段。这样做最有效的方法是什么?它必须是单独的UPDATETEXT声明吗?我是否必须首先额外SELECT

2 个答案:

答案 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

案例的前半部分只是将字段设置为自身,这看起来有点无意义。