C# T-SQL中解析和替换值的有效方法

C# T-SQL中解析和替换值的有效方法,c#,C#,我有很多T-SQL查询需要解析和替换某些值 查询可能如下所示 SELECT dbo.udfTest(123,'Bob') as Foo SELECT dbo.udfTest ( 123 ) as Foo 或者 SELECT dbo.udfTest(123) as Foo 我的任务是用另一个给定的值替换数字值,但当我考虑使用string类滚动某些内容并执行子字符串等操作时,我开始遇到很多类似这样的边缘情况 SELECT dbo.udfTest(123,'Bob') as Foo SELEC

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

查询可能如下所示

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

SELECT dbo.udfTest(123) as Foo
我的任务是用另一个给定的值替换数字值,但当我考虑使用string类滚动某些内容并执行子字符串等操作时,我开始遇到很多类似这样的边缘情况

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

再加上任何空格、大小写、括号、嵌套括号的组合,你可以想象我将要涵盖的变体数量……令人讨厌


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

匹配多个可能的模式时,RegEx会立刻说。正则表达式会很难看,但它应该可以很容易地把你带到你想去的地方。

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

您可能可以使用Visual Studio的数据库功能。你看,尤其是

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


也许这篇文章会有所帮助。如果没有其他问题,它可能会提示您向谁寻求帮助。

嗯?你到底想干什么?您需要解析T-SQL语句吗?@keith:您需要一个纯代码的解决方案,还是愿意使用其他工具?@p.campbell这只是代码,是一个更大过程的一部分,在这种情况下,我无法跳出代码循环。@John-是的,在XMLA被分析处理之前嵌入到XMLA中的parsting T-SQLservices@keith-你这里有一只熊。我的直觉肯定建议使用正则表达式,但我不想想象您需要的正则表达式的复杂性:-/。我想我的第一步应该是尝试获得一个要处理的唯一语句列表,也许可以用一些常量值替换所有的参数。我希望正则表达式像听起来那样简单。@keith:编写正则表达式会有些困难,但与任何其他方法相比,它可能要简单得多。您是一次又一次地替换相同的值,还是有许多不同的值需要替换?如果是后者,你可能需要写一些东西来生成你的正则表达式。为了便于解释,我简化了这个场景,不用说它不是那么简单。我事先不知道T-SQL中的数字是多少(示例中是98),也不知道我要把它改成什么(这是一个参数)。我不能进行查找和替换,除非我能说得更像…将98替换为X,当98位于UDF名称后面的括号内时,UDF是Y,可能有也可能没有空格、括号和其他东西。@Keith我说的不是查找和替换,我的意思是编辑你的自定义项,在函数中点击一个查找表,将旧值映射到新值,并将新值用于函数中的任何其他操作。对不起,我误解了…但这一点没有意义;我无法控制源UDF;这对我来说只是盲目的T-SQL,我必须进行调整。如果我可以获得更多关于查询的元数据,并以DBConnectionStringBuilder允许的方式对查询执行更新,这将是非常好的,但是我快速阅读该类会告诉我A)我不能,或者B)我不够聪明,无法try@keith:此外,我非常确信API不仅会构建一个描述查询的解析树,而且还允许您修改解析树,然后从修改后的树生成脚本。请参阅“获取皇冠珠宝”文章中的ParsingAndScriptGen.zip。