列出sql脚本使用的表,以及访问该表的性质
我有一个包含数千行的脚本,我想提取脚本引用的所有表和临时表,以及对表的访问性质,如选择、插入、更新或删除。是否有一种工具可用于此目的 脚本输入示例:列出sql脚本使用的表,以及访问该表的性质,sql,sql-server,Sql,Sql Server,我有一个包含数千行的脚本,我想提取脚本引用的所有表和临时表,以及对表的访问性质,如选择、插入、更新或删除。是否有一种工具可用于此目的 脚本输入示例: SELECT * FROM Table1 UPDATE Table1 SET Col1 = 1 DELETE FROM Table2 EXEC 'INSERT INTO @Table3 SELECT ''Test''' 样本输出: 1. Table1 - select, update 2. Table2 - delete 3. @Table3
SELECT * FROM Table1
UPDATE Table1 SET Col1 = 1
DELETE FROM Table2
EXEC 'INSERT INTO @Table3 SELECT ''Test'''
样本输出:
1. Table1 - select, update
2. Table2 - delete
3. @Table3 - insert
您可能会发现下面的查询很有用,但是,它没有提供来自动态SQL语句的引用,还可能提供表变量和临时表的引用 我认为,要获得所需的信息级别,您可能需要编写自己的脚本/程序。之前,我用C语言编写了一些东西,提供了下面查询的结果,包括任何动态SQL引用
有一个系统函数名为:fn_dblog。您可以按如下方式使用它:
IF OBJECT_ID('tempdb..#tempLog') IS NOT NULL DROP TABLE #tempLog
-- Raw Data
SELECT DISTINCT
[AllocUnitName],
Operation
INTO #tempLog
FROM sys.fn_dblog(NULL,NULL)
WHERE Operation IN ('LOP_INSERT_ROWS','LOP_MODIFY_ROW',
'LOP_DELETE_ROWS','LOP_BEGIN_XACT','LOP_COMMIT_XACT')
AND [AllocUnitName] is not null
ORDER By [AllocUnitName], Operation
-- SELECT * FROM #tempLog
-- Display Enhancement and Grouping
SELECT [AllocUnitName], Operations = STUFF((
SELECT N', ' + REPLACE(operation,'LOP_', '')
FROM #tempLog
WHERE [AllocUnitName] = x.[AllocUnitName]
FOR XML PATH(''), TYPE).value(N'.[1]', N'nvarchar(max)'), 1, 2, N'')
FROM #tempLog AS x
WHERE [AllocUnitName] is not null
GROUP BY [AllocUnitName]
ORDER BY [AllocUnitName]
执行计划XML将很容易访问所有这些信息。我在尝试运行它时遇到此错误:'对对象'fn_dblog',数据库'mssqlsystemresource',架构'sys'的SELECT权限被拒绝。@ricsierics您没有从中读取的权限。以管理员身份登录或授予当前管理员的权限。由于角色限制,我无法登录。我想完成这项任务不需要管理员
IF OBJECT_ID('tempdb..#tempLog') IS NOT NULL DROP TABLE #tempLog
-- Raw Data
SELECT DISTINCT
[AllocUnitName],
Operation
INTO #tempLog
FROM sys.fn_dblog(NULL,NULL)
WHERE Operation IN ('LOP_INSERT_ROWS','LOP_MODIFY_ROW',
'LOP_DELETE_ROWS','LOP_BEGIN_XACT','LOP_COMMIT_XACT')
AND [AllocUnitName] is not null
ORDER By [AllocUnitName], Operation
-- SELECT * FROM #tempLog
-- Display Enhancement and Grouping
SELECT [AllocUnitName], Operations = STUFF((
SELECT N', ' + REPLACE(operation,'LOP_', '')
FROM #tempLog
WHERE [AllocUnitName] = x.[AllocUnitName]
FOR XML PATH(''), TYPE).value(N'.[1]', N'nvarchar(max)'), 1, 2, N'')
FROM #tempLog AS x
WHERE [AllocUnitName] is not null
GROUP BY [AllocUnitName]
ORDER BY [AllocUnitName]