Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
列出sql脚本使用的表,以及访问该表的性质_Sql_Sql Server - Fatal编程技术网

列出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]