scriptdom - 在动态 SQL 中,ScriptDom 正在查找 IF 语句,而不是 UPDATE 语句
问题描述
我正在使用 TransactSQL.ScriptDom 来解析 SQL 语句。我已经定义了要查找 a) IF 语句和 b) UPDATE 语句的规则。当我查看非动态 SQL 时,规则工作得很好。但是,当我查看动态 SQL 时,我的代码只检测到 IF 块;它不检测 UPDATE 语句。
例如,这段代码在非动态和动态场景中都被调试器命中:
public override void Visit(IfStatement ifStatement)
{
...
}
但是,此代码在任何动态 SQL 场景中都不会受到影响,我也尝试过使用 UpdateSpecification:
public override void Visit(UpdateStatement updateStatement)
{
...
}
现在,如果我将代码更改为 Visit(TSqlFragment test),代码将被命中,但我的 UPDATE 语句只看到一个 AsciiStringLiteral 类型的节点。有没有更好的方法让我的代码访问 UPDATE 语句?
解决方案
忽略,这是用户错误。我的动态 SQL 中有一个 type-o,我错误地使用了单引号。换句话说,我正在使用这个:
@"EXEC('UPDATE dbo.MyTable
SET MyColumn = 'MyValue';');",
...而不是这个:
@"EXEC('UPDATE dbo.MyTable
SET MyColumn = ''MyValue'';');",
(我考虑完全删除这个问题,但我会留下它以防它帮助其他人。)
推荐阅读
- linux - “设备上没有剩余空间” - 在 ubuntu 机器上运行 docker-compose 时。无助于清理和重启
- c# - 如何在 Xunit 中将数据从一个测试传递到另一个测试?
- return-value - 确定一个固定的、定义的周期/值,Pine Script
- docker - Letsencrypt 证书生成但使用 dns acme 挑战使用 docker traefik 出现 TLS 错误
- azure - Azure Databricks 外部化元存储 - MSFT 脚本未运行
- excel - 给定日期小于条件的 MAXIFS 返回最近的行
- scala - 为什么 A => String 与 _1.type => String where val _1: A 不一样?
- python - 如何通过知道python中单词的偏移量从文本文件中获取原始句子?
- okta - 我正在尝试集成 OKTA React 本机,但我只有 SAML 文件。如何从中获取 oidc 值?
- python - 熊猫不重命名列名