我使用SQLite数据库并在执行实际查询之前运行EXPLAIN语句,以验证是否有任何尝试在数据库上写入。
现在,我们已经迁移到SQL Server,我需要知道查询是否尝试在数据库上写入,或者只是一个简单的SELECT语句。我基本上试图避免任何恶意声明。
答案 0 :(得分:8)
答案 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
)
但正如我的评论中所述,您最好不要让用户有权进行任何更改。
也可以制作“仅”选择但非常恶意的语句。我可以轻松地编写一个选择,专门锁定数据库中的每个表,并运行一个小时。