什么是SQL Server中的EXPLAIN表单SQLite?

时间:2011-02-02 09:49:57

标签: sql-server sqlite explain

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

现在,我们已经迁移到SQL Server,我需要知道查询是否尝试在数据库上写入,或者只是一个简单的SELECT语句。我基本上试图避免任何恶意声​​明。

2 个答案:

答案 0 :(得分:8)

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

请参阅MSDN


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

答案 1 :(得分:3)

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

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

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

但正如我的评论中所述,您最好不要让用户有权进行任何更改。

也可以制作“仅”选择但非常恶意的语句。我可以轻松地编写一个选择,专门锁定数据库中的每个表,并运行一个小时。