0

我需要遍历一张表并从值中删除一行。我想做的是这样的:

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”。

所以基本上我需要遍历表并从列中删除所有 <p> 和 </p> 。有人可以帮我吗?

4

2 回答 2

0

我认为,如果您不再将其视为一个循环,而是将其视为一个集合,您会发现此查询比您尝试的要合乎逻辑:

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

正如我在对 Gordon 的回答的评论中提到的那样,我在此处添加了一个额外的 where 子句,以便更新所有行,无论它们是否包含 only <p>、 only</p>或两者都包含。抱歉,我最初没有透露原因。

于 2012-07-13T17:59:31.857 回答
0

这行得通吗?

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

看起来简单多了。

于 2012-07-13T18:00:28.847 回答