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

我以前从来没有这样做过,但如果我不得不这样做,这是一个丑陋的选择。首先,将您的数据转储到一个临时表@Tmp。然后,使用一系列更新语句:

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 回答
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 回答