【问题标题】:what is the equivalent of EXPLAIN form SQLite in SQL Server?SQL Server 中的 EXPLAIN 形式 SQLite 的等价物是什么?
【发布时间】:2011-06-19 20:42:32
【问题描述】:

我使用 SQLite 数据库并在执行实际查询之前运行 EXPLAIN 语句以验证是否有任何写入数据库的尝试。

现在,我们已经迁移到 SQL Server,我需要知道一个查询是试图写入数据库还是只是一个简单的 SELECT 语句。我基本上尽量避免任何恶意言论。

【问题讨论】:

  • 您为什么不使用没有任何 DML/DDL 权限的用户/角色/应用程序角色运行查询?
  • 确实;正如 Damien 所说,使用 SQL Server 的方法是简单地创建一个无法写入数据库的用户,然后使用它。相比之下,尝试通过分析查询计划来做一些聪明的事情非常复杂且容易出现问题。

标签: sql-server sqlite explain


【解决方案1】:

您可以通过单击预估查询计划按钮查看 SSMS 中任何查询的预估查询计划。

MSDN


但是,如果用户不应该写入数据库,则不应该有这样做的权限。确保它属于具有受限权限的角色。

【讨论】:

    【解决方案2】:

    如果您决定走这条路,您可以执行以下操作:

    set showplan_xml on
    go
    set noexec on
    go
    select * from sysobjects
    go
    set noexec off
    go
    set showplan_xml off
    go
    

    这将返回 3 个包含单列 XML 的结果集。第二个结果集是实际查询的查询计划(在本例中为select * from sysobjects

    但正如我在评论中指出的那样,您最好阻止用户有权进行任何更改。

    也可以制作“仅”选择但也非常恶意的语句。我可以轻松编写一个独占锁定数据库中每个表的 select,并且需要一个小时才能运行。

    【讨论】:

    • 如果由于某种原因只能在远程服务器上执行查询,这比 GUI 更好!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-12
    • 1970-01-01
    • 2011-10-12
    • 2010-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多