2010-06-02 25 views
0

我有一个包含6个列的表格,其中包含HTML内容及其中的一些标记,现在当移动到新设计的站点时,大部分此HTML代码都必须被删除。除了<B></B>之外或多或少的所有标签。用于替换/删除子字符串的SQL Server T-SQL语句

是否有一个很好的方法来做到这一点,确定所有标签结束删除它们在数据内?我确定在测试中没有<>符号,所以正则表达式可能会起作用?

我的选择是获取每一行,处理它并更新数据库,但我猜这是可以直接在T-SQL中执行的。

我的服务器是MSSQL 2008,位于托管环境中,但如果需要我可以获取本地副本。

感谢, 斯特凡

+1

什么版本的SQL Server?它支持CLR吗? – 2010-06-02 08:20:50

回答

1

使用正则表达式从SQL 2000 http://blogs.msdn.com/b/khen1234/archive/2005/05/11/416392.aspx

而且从2005年SQL高达http://weblogs.sqlteam.com/jeffs/archive/2007/04/27/SQL-2005-Regular-Expression-Replace.aspx

修订是最后一个环节给出了似乎从我的极其肤浅的测试工作正则表达式对于SQL2005 ,但仅适用于最多4000个字符的字符串

using System; 
using System.Data; 
using System.Data.SqlClient; 
using System.Data.SqlTypes; 
using Microsoft.SqlServer.Server; 
using System.Text.RegularExpressions; 

public partial class UserDefinedFunctions 
{ 
    [Microsoft.SqlServer.Server.SqlFunction(IsDeterministic=true,IsPrecise=true)] 
    public static SqlString StripAllButBoldTags(SqlString expression) 
    { 
     if (expression.IsNull) 
      return SqlString.Null; 

     Regex r = new Regex("</?([a-z][a-z0-9]*[^<>]*)>", RegexOptions.IgnoreCase); 

     return new SqlString(r.Replace(expression.ToString(), new MatchEvaluator(ComputeReplacement))); 
    } 

    public static String ComputeReplacement(Match m) 
    { 
     return string.Compare(m.Groups[1].Value, "B",true) == 0? m.Value: ""; 
    } 
}; 
+0

我在托管环境中的服务器上执行此操作,但我的权限有限,我仍然可以执行他们正在讨论的任务吗? – StefanE 2010-06-02 08:52:50

+0

@Stefan。显然取决于你的主人,但我想他们很可能不会让你这样做。另外,我对此有了一点发挥,发现当传递超过4000个字符的字符串时,它似乎悄无声息地截断了它们,所以我认为你的建议在SQL Server之外完成是比较可取的! – 2010-06-02 09:13:32

+1

好的谢谢你的帮助! (而且我正在购买一本学习更高级SQL的书:)) – StefanE 2010-06-02 10:21:36