SQLite データベースを使用し、実際のクエリを実行する前に EXPLAIN ステートメントを実行して、データベースに書き込みが試みられたかどうかを確認しました。
SQL Server に移行した今、クエリがデータベースに書き込もうとしているか、単純な SELECT ステートメントであるかを知る必要があります。私は基本的に悪意のある発言を避けるようにしています。
SQLite データベースを使用し、実際のクエリを実行する前に EXPLAIN ステートメントを実行して、データベースに書き込みが試みられたかどうかを確認しました。
SQL Server に移行した今、クエリがデータベースに書き込もうとしているか、単純な SELECT ステートメントであるかを知る必要があります。私は基本的に悪意のある発言を避けるようにしています。
[推定クエリ プラン] ボタンをクリックすると、SSMS の任意のクエリの推定クエリ プランを表示できます。
MSDNを参照してください。
ただし、ユーザーがデータベースに書き込みを行うべきでない場合は、そのためのアクセス許可を持ってはなりません。アクセス許可が制限されている役割に属していることを確認してください。
このルートに進むことにした場合は、次のことができます。
set showplan_xml on
go
set noexec on
go
select * from sysobjects
go
set noexec off
go
set showplan_xml off
go
これにより、XML の 1 つの列を含む 3 つの結果セットが返されます。2 番目の結果セットは、実際のクエリのクエリ プランです (この場合はselect * from sysobjects
) 。
しかし、私のコメントで述べたように、ユーザーが変更を加える権限を持たないようにする方がよいでしょう。
「ただの」選択であるがかなり悪意のあるステートメントを作成することも可能です。データベース内のすべてのテーブルを排他的にロックし、実行に 1 時間かかる select を簡単に作成できます。