что эквивалентно EXPLAIN форме SQLite в SQL Server? - PullRequest
6 голосов
/ 02 февраля 2011

Я использовал базу данных SQLite и запустил оператор EXPLAIN перед выполнением фактического запроса, чтобы проверить, была ли попытка записи в базу данных.

Теперь мы перешли на SQL Server, и мне нужно знать, пытается ли запрос записать в базу данных или это просто инструкция SELECT. Я в основном стараюсь избегать любых злонамеренных заявлений.

Ответы [ 2 ]

8 голосов
/ 02 февраля 2011

Вы можете просмотреть примерный план запроса любого запроса в SSMS, нажав кнопку оценочного плана запроса.

См. MSDN .


Однако, еслипользователь не должен писать в базу данных, у него не должно быть прав для этого.Убедитесь, что он принадлежит роли с ограниченными разрешениями.

3 голосов
/ 02 февраля 2011

Если вы решите пойти по этому пути, вы можете сделать следующее:

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)

Но, как отмечалось в моем комментарии, было бы лучше запретить пользователю иметь права на внесение любых изменений.

Также возможно создать утверждения, которые являются «только» выборками, но также являются довольно вредоносными.Я мог бы легко написать выборку, которая эксклюзивно блокирует каждую таблицу в базе данных и занимает час для ее запуска.

...