2009-10-07 42 views
0

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

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

...但对于文本/ NTEXT领域。什么是最有效的方式去做到这一点?它是否必须是一个单独的UPDATETEXT声明?我必须先做一个额外的SELECT吗?

回答

3

上述示例将在SQL Server 2005中工作,其中val是一个文本字段,并且您正在更新整个值。如果你只是替换字段的一部分,那么在单独的语句中使用UPDATETEXT。

更好的解决方案是,如果可以更新模式,则使用VARCHAR(MAX)或NVARCHAR(MAX)列。在将来的SQL Server版本中,UPDATETEXT命令已被标记为已弃用。如果您使用这些数据类型,则可以使用UPDATE语句中的column_name.WRITE替换部分值。

+0

我需要将文本追加到文本字段的末尾。该解决方案必须在MS SQL 2000-2008上运行。所以转换为VARCHAR(MAX)/ NVARCHAR(MAX)就出来了。 – Fung

0

也许例子是不现实的,但不能您简化这归因于:

UPDATE [some_stuff] 
SET last_update = GETDATE() 
WHERE val != @NewVal 

的情况下上半年刚刚将字段设置本身,这似乎有点毫无意义。

+0

@John,这实际上只是一个更大的查询的一部分。其他一些字段也需要根据其他字段进行有条件的更新,这就是为什么我不能将它作为WHERE子句,除非我拆分更新。 – Fung