SQL使用CASE WHEN替换内部更新

时间:2013-04-17 15:21:10

标签: sql sql-server-2008 tsql

嘿伙计们我一直试图解决这个问题一段时间,但我需要一些帮助,这是我的代码:

UPDATE prop_Notes 
SET Notes += 
            (
              CASE 
                   WHEN Notes LIKE '%<p>" + ProductName + @"</p>%'
                   THEN replace(Notes,'<p>" + ProductName + @"</p>', '<p>" + ProductName + @"</p>')
                   ELSE '<p>" + ProductName + @"</p>'
              END
            )
FROM prop_Notes

我希望能够在我的sql列中添加/追加一个新的字符串Notes如果它内部还没有包含该字符串。如果存在则只需替换现有项目,因此字符串不会更改。当我尝试运行它时,我收到错误的错误说法。任何帮助将不胜感激谢谢!

1 个答案:

答案 0 :(得分:2)

您的查询问题是from语句。您可以通过删除它来修复模糊列。

如果我能正确理解你的问题,我建议你考虑一个更简单的替代方案,例如:

UPDATE prop_Notes 
    SET Notes = coalesce(Notes, '') + '<p>" + ProductName + @"</p>'
    where Notes not LIKE '%<p>" + ProductName + @"</p>%'

在这种情况下,您需要了解updates中的别名:

UPDATE pn
SET Notes += 
            (
              CASE 
                   WHEN Notes LIKE '%<p>" + ProductName + @"</p>%'
                   THEN replace(Notes,'<p>" + ProductName + @"</p>', '<p>" + ProductName + @"</p>')
                   ELSE '<p>" + ProductName + @"</p>'
              END
            )
FROM prop_Notes pn