1

基本的に、コードにエラーがあり、エントリが HTML を含むデータベースに保存されていました。将来のすべてのエントリが正しくなるようにコードを修正しましたが、データベースを一度実行して以前のものをすべて修正したかったのです。これを行うために、このフォーラムでこの機能を見つけました:

CREATE FUNCTION [dbo].[udf_StripHTML] (@HTMLText VARCHAR(MAX))
RETURNS VARCHAR(MAX) AS
BEGIN
DECLARE @Start INT
DECLARE @End INT
DECLARE @Length INT
SET @Start = CHARINDEX('<',@HTMLText)
SET @End = CHARINDEX('>',@HTMLText,CHARINDEX('<',@HTMLText))
SET @Length = (@End - @Start) + 1
WHILE @Start > 0 AND @End > 0 AND @Length > 0
BEGIN
    SET @HTMLText = STUFF(@HTMLText,@Start,@Length,'')
    SET @Start = CHARINDEX('<',@HTMLText)
    SET @End = CHARINDEX('>',@HTMLText,CHARINDEX('<',@HTMLText))
    SET @Length = (@End - @Start) + 1
END

ただし、これは一度しか使用しないため、関数を作成せずにこれを実行したかったのですが、DBA はデータベースに何も入れてほしくないのです。これをUDFの外で機能させるにはどうすればよいですか? 私はSQLにあまり詳しくありません。

私のコード:

Update [OrderItem]
set [Description] = --??? Description without the HTML
from [Order] o inner join [OrderItem] oi on o.OrderID = oi.OrderID
4

2 に答える 2

0

これは、CREATE FUNCTION タグを削除するだけで簡単に機能します。これを SSMS で自分で実行してみてください。

DECLARE @HTMLText VARCHAR(MAX)
SET @HTMLText = '<html><head><title>this is title</title></head><body>this is text</body></html>'

DECLARE @Start INT
DECLARE @End INT
DECLARE @Length INT
SET @Start = CHARINDEX('<',@HTMLText)
SET @End = CHARINDEX('>',@HTMLText,CHARINDEX('<',@HTMLText))
SET @Length = (@End - @Start) + 1
WHILE @Start > 0 AND @End > 0 AND @Length > 0
BEGIN
    SET @HTMLText = STUFF(@HTMLText,@Start,@Length,'')
    SET @Start = CHARINDEX('<',@HTMLText)
    SET @End = CHARINDEX('>',@HTMLText,CHARINDEX('<',@HTMLText))
    SET @Length = (@End - @Start) + 1
END

select @HTMLText
于 2013-07-12T08:22:46.490 に答える
0

私はこれまでにこれをやったことがありませんが、もしそうしなければならない場合、これは醜い代替手段です. まず、データを一時テーブル @Tmp にダンプします。次に、一連の update ステートメントを使用します。

Update @Tmp set Description=Replace(Description,'<html>','')
Update @Tmp set Description=Replace(Description,'</html>','')
Update @Tmp set Description=Replace(Description,'<table>','')
Update @Tmp set Description=Replace(Description,'</table>','')

これにより、タグの維持/追加/削除が比較的簡単になります。それらはすべて明示的に定義されているため、最も難しいのは、何を取り除く必要があるかを事前に知ることです。

于 2013-07-11T19:39:24.433 に答える