问题标签 [scriptdom]

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 投票
2 回答
761 浏览

c# - 在 C# 中规范化 SQL 查询文本

我在 SQL Server 数据库中执行了以下查询。

然后我尝试使用以下 SQL 命令获取查询文本以及统计信息:

我得到这样的东西

但是,我想从我的 c# 程序中执行字符串匹配并获取查询文本的统计信息。c# 程序只知道原始查询(SELECT * FROM Production.Product WHERE Name = 'Bearing Ball')。被替换的参数不是唯一的问题,因为您可以看到数据库服务器在表名中添加了方括号。

有没有办法克服这个问题。如何将我的原始查询(SELECT * FROM Production.Product WHERE Name = 'Bearing Ball')转换为标准化查询((@1 varchar(8000))SELECT * FROM [Production].[Product] WHERE [Name]=@ 1)? 我可以使用 Microsoft.Data.Schema.ScriptDom 执行此操作吗?请注意,我想规范化我的查询而不在数据库服务器中执行它。

0 投票
1 回答
69 浏览

c# - ScriptDom + DeleteStatement

我想在任何“DeclareTableVariableStatement”之后插入“DeleteStatement”,但我不知道怎么做!这是我的示例代码。

0 投票
1 回答
260 浏览

c# - 带有别名的 SELECT 的 ScriptDom 解析

我正在寻找使用 ScriptDom 来解析 T-SQL 语句并确保至少指定了两列。我找到了一种提取列名的方法,并且可以从中正确地进行验证。但是,我还想验证该列是否有别名,并且不确定如何检查。

我想确保 select 语句同时指定 MCA 和 MOC 列。

0 投票
1 回答
312 浏览

.net - TSql130Parser 似乎无法识别提示

我使用对 Microsoft.SqlServer.TransactSql.ScriptDom.dll 的引用创建了以下控制台应用程序:

运行此控制台应用程序会产生以下输出:

但此 SQL 片段已在 Microsoft SQL Server Management Studio 中正确解析。

因此,TSql130Parser 似乎无法正常工作。您知道是否有解决此问题的方法吗?

0 投票
0 回答
43 浏览

sql-server - 用于 CosmosDb 的 Microsoft.SqlServer.TransactSql.ScriptDom?

是否有用于解析和操作 CosmosDB 解析树的 Microsoft 库,例如用于 SQL 服务器的 Microsoft.SqlServer.TransactSql.ScriptDom?

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)

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

这是一个已知的错误?

0 投票
1 回答
399 浏览

c# - Microsoft Tsql Scriptdom 中的哪个 API 将允许我从 SQL 脚本中检索/存储所有表引用?

这是我引用的 MS 文档:https ://docs.microsoft.com/en-us/dotnet/api/microsoft.sqlserver.transactsql.scriptdom?view=sql-dacfx-140.3881.1

我已经看过好几次了,但似乎无法找到我能够在 sql 脚本中检索每个表引用的实际名称的位置。NamedTableReference 是我找到的最接近的东西,但这仅允许您查看表的别名,而我想要实际名称。

例子:

我想要一个输出: Table1 Table2

最后一部分不一定很重要,但只是为了上下文。我正在尝试扩展开源 TSQLLint 项目的功能,这将使我能够检查我们公司中开发人员正在使用的非常活跃的表名没有 NOLOCK 提示。

0 投票
1 回答
38 浏览

scriptdom - Microsoft.SqlServer.TransactSql.ScriptDom 中不是表的多部分标识符

我正在尝试使用Microsoft.SqlServer.TransactSql.ScriptDom来检查表达式是否为标量常量。

这是这样一个表达式:

这里不是这样的表达:

它不是一个常量,因为它引用了 column DateOfBirth。我怎样才能确定这一点?

我没想到——以及我遇到麻烦的原因——Microsoft.SqlServer.TransactSql.ScriptDom认为那YEAR是一个ColumnReferenceExpression.

0 投票
1 回答
27 浏览

scriptdom - 在动态 SQL 中,ScriptDom 正在查找 IF 语句,而不是 UPDATE 语句

我正在使用 TransactSQL.ScriptDom 来解析 SQL 语句。我已经定义了要查找 a) IF 语句和 b) UPDATE 语句的规则。当我查看非动态 SQL 时,规则工作得很好。但是,当我查看动态 SQL 时,我的代码只检测到 IF 块;它不检测 UPDATE 语句。

例如,这段代码在非动态和动态场景中都被调试器命中:

但是,此代码在任何动态 SQL 场景中都不会受到影响,我也尝试过使用 UpdateSpecification:

现在,如果我将代码更改为 Visit(TSqlFragment test),代码将被命中,但我的 UPDATE 语句只看到一个 AsciiStringLiteral 类型的节点。有没有更好的方法让我的代码访问 UPDATE 语句?