用于解析和替换T-SQL中的值的有效方法

时间:2011-04-21 04:03:15

标签: c#

我有很多需要解析和替换某些值的T-SQL查询。

查询可能如下所示

SELECT dbo.udfTest(123,'Bob') as Foo

或者

SELECT dbo.udfTest(123) as Foo

我的任务是用另一个给定的值替换数字值,但是当我考虑使用字符串类滚动某些内容并进行子字符串等时,我开始遇到很多像这样的边缘情况

SELECT dbo.udfTest ( 123 ) as Foo

SELECT [dbo].[udfTest]( 123 ) as Foo

SELECT [dbo].[udfTest]( 123 ) as Foo1, dbo.udfTest(123) as Foo2

抛出空白,套管,括号,嵌套括号的任意组合,您可以想象我必须涵盖的变化数量......令人讨厌。

这让我想知道是否有更好的方法? RegEx可能是一场戏,但我想我会把它扔掉以获得一些意见。

3 个答案:

答案 0 :(得分:2)

您可以使用Visual Studio的数据库功能。请参阅API Reference for Database Features of Visual Studio,尤其是Microsoft.Data.Schema.ScriptDom Namespace

此外,快速搜索“parse mdx query”出现了几个有趣的点击。我很确定我曾经找到一个可以解析MDX查询的工具,然后使用解析树来创建格式化版本。

也许文章Getting to the Crown Jewels会有所帮助。如果不出意外,它可能会给你一个关于向谁寻求帮助的暗示。

答案 1 :(得分:0)

匹配多种可能的模式说RegEx马上就可以了。 RegEx会很难看,但它可以让你轻松到达你想去的地方。

答案 2 :(得分:0)

如果最终目标是使用一组新数字(基本上是翻译)替换某些数字集,那么更新UDF以使用查找表将旧值映射到新值不是更容易尝试在发生之前拦截每个方法调用? (除非你的例子被大大简化,因为它们每次只显示相同的函数,但实际上有许多必须更新)