【问题标题】:How can I conditionally update a text/ntext field in SQL?如何有条件地更新 SQL 中的 text/ntext 字段?
【发布时间】:2009-10-07 03:02:21
【问题描述】:

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

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

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

【问题讨论】:

    标签: sql sql-server tsql sql-update


    【解决方案1】:

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

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

    【讨论】:

    • 我需要将文本附加到文本字段的末尾。该解决方案必须适用于 MS SQL 2000-2008。所以转换成 VARCHAR(MAX)/NVARCHAR(MAX) 就不行了。
    【解决方案2】:

    也许这个例子不现实,但你能不能把它简化成:

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

    案例的前半部分只是将字段设置为自身,这似乎没有意义。

    【讨论】:

    • @John,这实际上只是更大查询的一部分。其他一些字段也需要根据其他一些字段有条件地更新,这就是为什么我不能把它作为 WHERE 子句,除非我拆分更新。
    猜你喜欢
    • 1970-01-01
    • 2021-06-14
    • 1970-01-01
    • 2011-07-03
    • 1970-01-01
    • 1970-01-01
    • 2018-06-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多