问题标签 [tsql-parser]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
310 浏览

sql-server - SQL Server 的 ow "batchparser.dll" - 如何使用它?

是否有记录或至少模糊记录的方式来利用batchparser.dll隐藏在 SQL Server 目录结构 ( ) 深处的 SQL Server C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Binn

是否有可能提交 T-SQL 批处理并对其进行语法错误解析?

0 投票
0 回答
380 浏览

c# - 获取 TSql100Parser 节点的父节点

由于缺乏有关使用TSql100Parser该类的文档,有什么方法可以确定特定节点的父节点?

我正在使用Microsoft.Data.Schema.ScriptDom.SqlMicrosoft.Data.Schema.ScriptDom程序集为我进行解析。

例子:

如果这不可能,我可以将父级作为附加参数传递给该__processExpression()方法,但如果有官方方法,我想避免这种情况。

0 投票
2 回答
3701 浏览

c# - 正则表达式从 .sql 文件 C# 中的 DDL 解析存储过程和对象名称

我有一个 .sql 文件,其中可能包含几个存储过程的 DDL 定义、表、触发器、视图等的更改语句

它可能有这样的陈述:

  • 创建过程/创建过程
  • 改变程序/改变程序
  • 丢弃过程/丢弃过程
  • 创建表/触发器/视图
  • 更改表/触发器/视图
  • 拖放表/触发器/视图
  • ETC

解析 .sql 文件并获取对象列表(Proc/Table/View 名称)以及对它们执行的操作(ALTER/CREATE/DROP)的最佳方法是什么?我想代替使用 Microsoft.Data.Schema.ScriptDom 或 ANTLR 或其他解析器之类的东西,最简单的方法是使用 RegEx。但不确定我应该写什么样的正则表达式来涵盖所有场景。

到目前为止,这个表达式能够匹配上述所有规则。但是我如何获得它前面的对象的名称。例如。它匹配

(create|alter|drop)\s+(procedure|proc|table|trigger|view|function|constraint)

如何获得 AdvisorGroups 的名称是我的问题。我的 RegEx 也不完美,因为它可能有 [dbo]。在它面前与否。它也可能只是 Alter table AdvisorGroups。我并不是要照顾所有的可能性。只是最低限度。

ALTER TABLE [dbo].[AdvisorGroups] 添加约束 [XXX]

-提前致谢

0 投票
1 回答
2029 浏览

c# - 用于检测 DDL(创建、更改、删​​除).sql 脚本中隐藏的 DML(插入、更新、删除)语句的正则表达式

更新:为了让这个问题更容易。我已经更改了字符串,现在您根本不必担心 BEGIN END。相反,我现在只有 GO 语句作为终止符。我希望我现在能从其他人那里得到一些答案

我需要编写一个正则表达式,它可以检测隐藏的 DML 语句,如 DDL 脚本(CREATE、ALTER、DROP)中的 INSERT、UPDATE、DELETE。

例子。在下面的脚本中,它应该捕获 2 个delete table5语句和最后一个insert into table3语句。但它应该忽略实际上在存储过程本身的主体中的插入语句。

如果你在这里运行这个 RegEx:http ://regexr.com?33rf3 ,你会看到我已经完成了 90%。唯一不起作用的部分是它正在进行贪婪匹配,直到最后一个 GO。我需要它在第一次 GO 时停止。我试过使用 +? 操作员使其不贪婪,但它不想工作。

0 投票
0 回答
1559 浏览

c# - Microsoft.SqlServer.TransactSql.ScriptDom:TSqlTokenType

在解析 SQL 查询时,例如:

并通过 TSqlParserToken 迭代有一个名为 TokenType 的属性。我得到以下信息:

我知道为了让解析器返回这些值,它需要了解底层架构。我是否可以为解析器提供底层对象,以便它可以返回一组更敏感的标记?

TSqlTokenType 枚举还具有诸如“表”、“模式”、“视图”之类的值,所以我确信这一定是可能的。只是文档稀缺。担

0 投票
0 回答
81 浏览

sql-server-2012 - 选择返回的每个字段都需要精确的表/列

在数据库应用程序中,我将执行一些 SQL 查询。但我还需要查询或结果中的一些元数据。

我基本上需要的是确切地知道每个字段的来源(表和列)。Algebrized Tree 包含更多信息,所以我将其用作示例。

促使我这样做的是,我需要根据数据的来源采取一些行动,而不仅仅是像它的类型这样的信息。

起初我不需要担心存储过程或视图。这些将稍后出现,但我不确定我是否可以穿越障碍,因为在这两种情况下,它们已经被解析并且这些信息在执行计划中丢失了。也无需覆盖由表达式更改的任何列。

一个成熟的 SQL 解析器可以帮助我完成一半的工作,但也涵盖了一些不需要的领域(任何与选择无关的 SQL 语法。

我希望 SQL Server 相关框架能给我我需要的东西。也许像 SMO 或 TSql10Parser 之类的东西,但我尝试遵循这些路径没有成功,也许我在某个地方走错了路。

提前致谢, 雅克

0 投票
2 回答
1621 浏览

java - Can we execute SQL without having a real database connection in java?

Can we execute SQL without having a real database connection in java? example:

I will replace :param in runtime in java code. Is there any way to do this?

I found this link: How do I extract selected columns given an Oracle SQL String?

but no quick solution is provided in this link

Currently thinking of: dummy hsqldb connection and execute SQL query. But it requires to span a new in memory db.

Is there any better & quick solution?

0 投票
0 回答
315 浏览

sql-server - 为什么 Microsoft.SqlServer.TransactSql.ScriptDom.TSqlParser 无法解析简单的有效表达式?

我们大量使用Microsoft.SqlServer.TransactSql.ScriptDom来处理一些 SQL 脚本。

我们的理解是解析器应该是完全保真的。

但是,我们最近发现了这个错误:

预期结果:isSuccess 为真

实际结果:isSuccess 为假

在 SQL Server 中运行以下查询有效: SELECT IIF( (IIF(1 = 1, 1, NULL)) IS NULL, 1, 0)

所以我们希望解析器也能够解析它。

这是一个已知的错误?