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>%';

あまり受け入れられなかったゴードンの回答へのコメントで述べたように、ここに追加の where 句を追加して、のみ<p>、のみ</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 に答える