特定の SQL クエリで使用されるすべてのフィールド (理想的にはテーブルの詳細を含む) のリストを返すことができるようにしたいと考えています。たとえば、クエリの入力:
SELECT t1.field1, field3
FROM dbo.table1 AS t1
INNER JOIN dbo.table2 as t2
ON t2.field2 = t1.field2
WHERE t2.field1 = 'someValue'
戻るだろう
+--------+-----------+--------+
| schema | tablename | field |
+--------+-----------+--------+
| dbo | table1 | field1 |
| dbo | table1 | field2 |
| dbo | table1 | field3 |
| dbo | table2 | field1 |
| dbo | table2 | field2 |
+--------+-----------+--------+
フィールド 3 がテーブル 2 ではなくテーブル 1 にあることをリーダーが知る方法がないため、実際には SQL カーネル (正しい言葉ですか? エンジン?) を使用する必要があります。このため、解決策はSQLになると思います。それも処理できればボーナスポイントSELECT *
!
sqlparse ( https://sqlparse.readthedocs.io/en/latest/ ) を使用して Python ソリューションを試みましたが、一時テーブル、サブクエリ、および CTE を含むより複雑な SQL クエリに問題がありました。また、エイリアスの処理も非常に困難でした (特にクエリが複数の場所で同じエイリアスを使用した場合)。明らかにfield3
、テーブル識別子がない上記のようなケースを処理できませんでした。また、それを処理することもできませんSELECT *
。
私は、SQL Server Management Studio 内に、または SQL Server 自体内に何らかの機能を備えた、より洗練されたソリューションがあることを望んでいました。Redgate の SQL Prompt があります。これは、その IntelliSense 内で、フォーマットしているアーキテクチャと SQL クエリをある程度理解している必要があります。
更新: 要求どおり: 私がこれを実行しようとしている理由はUsers
、組織内でどの SSRS レポートを実行できるかを判断するためです。これは、特定のレポートのすべてのデータセット (この場合は SQL クエリ) で使用されるすべてのフィールドにGRANT SELECT
権限が割り当てられているかどうかに完全に依存しています。私はRoles
すでに、彼らの. 私は今、それらの権限が実行を許可するレポートにそれを拡張したいと考えています。Users
GRANT SELECT
Roles