2011-08-05 43 views
0

我試圖擺脫MS Office在將內容從Word粘貼到我的網站上的窗體上時提供的其他標籤的列。更新和替換使用SQL的MS Office格式化

如何更新和替換內容(包括)和內容中的內容的發生?

這裏是我到目前爲止有:

UPDATE TABLE 
SET myColumn = REPLACE(myColumn, SUBSTRING(myColumn, CHARINDEX('<!--[if gte mso', myColumn), CHARINDEX('<![endif]-->', myColumn)-1), '') 

我的計劃是,直到所有出現從列去執行這個查詢幾次。但是,當列沒有發生任何事件時,我遇到了問題。

我猜這是因爲我計算子字符串的長度......每次執行幾個字符都會從列的開始處移除。

我是否需要類似case語句的內容來跳過沒有MS Office內容的行?

謝謝,

+0

因此,取代任何匹配'<! - [if gte mso? '? –

+0

是的,這就是我想要做的 - 我基本上想擺脫它... –

回答

0

作爲一個hacky更新,你可以;

create table test(id int, myColumn varchar(500), newValue varchar(500) null) 
insert test values 
    (1, '<!--[if gte mso XXX>hello<![endif]-->', ''), 
    (2, 'aaaaaaa', ''), 
    (3, '123<!--[if gte mso XXX>hello<![endif]-->456', ''), 
    (4, 'AA<!--[if gte mso 111>222<![endif]-->BB<!--[if gte mso 333>444<![endif]-->CC', '') 

;with cte(id, stripped) as (
    select id, myColumn from test 
    union all 
    select id, cast(stuff(stripped, charindex('<!--[if gte mso', stripped), charindex('<![endif]-->', stripped)-charindex('<!--[if gte mso', stripped)+len('<![endif]-->'), '') as varchar(500)) 
    from cte 
    where charindex('<!--[if gte mso', stripped) > 0 
) 
update test 
    set test.newValue = cte.stripped 
from test 
    inner join cte on cte.id = test.id 
    where charindex('<!--[if gte mso', stripped) = 0 

select * from test 

>> 
id newValue 
1 
2 aaaaaaa 
3 123456 
4 AABBCC