我希望能够返回给定 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 |
+--------+-----------+--------+
它确实需要使用 SQL 内核(这个词对吗?引擎?)因为读者无法知道 field3 在 table1 而不是 table2 中。出于这个原因,我假设解决方案是 SQL。如果它也可以处理,则可以加分SELECT *
!
我尝试了一个使用 sqlparse ( https://sqlparse.readthedocs.io/en/latest/ ) 的 python 解决方案,但是在处理涉及临时表、子查询和 CTE 的更复杂的 SQL 查询时遇到了麻烦。别名的处理也非常困难(特别是如果查询在多个地方使用相同的别名)。显然它不能处理像field3
上面没有表标识符的情况。也处理不了SELECT *
。
我希望 SQL Server Management Studio 中可能有更优雅的解决方案,甚至 SQL Server 本身中的某些功能。我们有来自 Redgate 的 SQL Prompt,它必须对它的智能感知、架构和它正在格式化的 SQL 查询有一定的了解。
更新:根据要求:我尝试这样做的原因是找出哪些Users
可以在我们的组织内执行哪些 SSRS 报告。这完全取决于他们在给定报告中的所有数据集(在我们的例子中是 SQL 查询)使用的所有字段上GRANT SELECT
分配给他们的权限。Roles
我已经设法根据他们Users
的. 我现在想扩展那些权限允许它们运行的报告。GRANT SELECT
Roles