通过替换更新内部选择列

时间:2012-07-13 17:56:44

标签: sql sql-server

我需要通过一个表并从值中删除一行。我想做的是这样的事情:

UPDATE infotabs
SET [content] = 
    replace(
     replace(
        (
            SELECT [content] 
            FROM   infotabs AS ib
            WHERE  ib.infotab_id = i.infotab_id  
        ), '<p>', '')
    , '</p>', '')
WHERE infotab_id= 
    (
        SELECT i.infotab_id 
        FROM         infotabs AS i
        WHERE     ([content] LIKE '%<p>%') 
    )

但这失败了:

  

消息4104,级别16,状态1,行8
多部分标识符   “i.infotab_id”无法受约束。

所以基本上我需要循环通过表并移除所有&lt; p&gt;和&lt; / p&gt;从列。有人可以帮助我吗?

2 个答案:

答案 0 :(得分:0)

我认为如果你不再把它想象成一个循环,并把它想象成一个集合,你会发现这个查询比你正在尝试的更合乎逻辑:

UPDATE infotabs SET content = REPLACE(REPLACE(content, '<p>', ''), '</p>', '')
 WHERE content LIKE '%<p>%' OR content LIKE '%</p>%';

正如我在对Gordon回答的评论中提到的,我没有得到好评,我在这里添加了一个额外的where子句,以便更新所有行,无论它们是否只包含<p>,只有{{ 1}},或两者兼而有之。对不起,我最初没有透露原因。

答案 1 :(得分:0)

这会有用吗?

UPDATE infotabs
    SET [content] =  replace(replace([content], '<p>', ''), '</p>', '')
    WHERE [content] LIKE '%<p>%'

似乎更简单。