【发布时间】:2015-05-26 08:03:49
【问题描述】:
您可以看到here 将C#code 语句解析为标记的效果如何。例如以下代码:
namespace MyNamespace
{
class MyClass
{
public void MyFunction(int arg1)
{
int var1 = arg1;
}
}
}
被解析为:
我想做这样的事情,但是用T-SQL 声明代替。例如,如果我有以下T-SQL 语句:
IIF(COALESCE([Col001], [Col002], [Col003]) > [Col004], [Col005] * [Col006] + ISNULL([Col007], [Col008]), CONCAT(SUBSTRING([Col009], 0, 3), 'sample text', [Col010]))
会给我这样的东西:
IIF, COALESCE, ISNULL, CONCAT, SUBSTRING - functions
[Col001], [Col002], ... , [Col010] - columns
0, 3, 'sample text' - variables
或者如果我有:
ISNULL([Col001], [Col002], [Col003])
有错误的结构:
[The isnull function requires 2 argument(s).] - error
没有任何免费或付费的最新解决方案,似乎使用 Microsoft 解析器是最好的解决方案。正如我所读到的,我需要使用 Microsoft.SqlServer.Management.SqlParser.Parser 命名空间,但没有任何示例,我无法以我喜欢的方式拆分 T-SQL 语句。此外,它似乎只适用于完整的语句(例如,您需要 SELECT 子句,而我只需要将它用于代码片段)。
我可以使用这个命名空间来做到这一点,还是最好开始编写 C# 类来满足我的需要?
【问题讨论】:
-
即使您能够使用它,您也想过您可能无法将它与您的应用“打包”在一起,因为它没有为此获得许可?
-
@xanatos 我不确定我是否理解你。如果可能的话,我想我可以使用这个命名空间。在搜索时,我发现了一些针对
T-SQL解析器的付费解决方案,但它们不是最新的(使用 SQL Server 2008,我正在使用 SQL Server 2012/2014) -
至少还有另一个用于解析 TSQL 的“microsoft”类:technet.microsoft.com/en-us/library/… 这里有人sqlblogcasts.com/blogs/sqlandthelike/archive/2012/08/29/… 甚至用它写了一个库
-
ANTLR 被 ASP.NET MVC 和 lot 其他项目使用。几种 SQL 方言已经可用
标签: c# .net sql-server tsql parsing