代码之家  ›  专栏  ›  技术社区  ›  prav

将sql代理作业结果导出到.csv文件

  •  0
  • prav  · 技术社区  · 14 年前

    作为性能优化,我对数据库进行了索引重建。

    我在@TABLE REBUILD WITH上使用了ALTER TABLE ALL(FILLFACTOR=@FILLFACTOR)。

    我想把这个安排为代理工作。

    现在我的要求是:

    1. 在重建索引之前,我需要将索引统计信息导出到csv文件

    2. 重建索引

    3. 重建索引后将索引导出到csv文件的统计信息。

    我在代理作业中放置了重建索引脚本,并手动执行了索引统计信息查询,以查看代理作业之前和之后的状态。

    我需要如何自动化

    1. 重建前的索引状态
    2. 重建
    3. 重新攻击后的统计。

    我正在使用这个脚本进行统计。

    DECLARE @DATABASE VARCHAR(10)= 'AdventureWorksDW2008' SELECT OBJECT_NAME(IPS.OBJECT_ID) AS [TABLENAME], SI.NAME AS [INDEXNAME], IPS.INDEX_TYPE_DESC, IPS.AVG_FRAGMENTATION_IN_PERCENT, IPS.AVG_FRAGMENT_SIZE_IN_PAGES, IPS.AVG_PAGE_SPACE_USED_IN_PERCENT, IPS.RECORD_COUNT, IPS.GHOST_RECORD_COUNT, IPS.FRAGMENT_COUNT, IPS.AVG_FRAGMENT_SIZE_IN_PAGES FROM SYS.DM_DB_INDEX_PHYSICAL_STATS(DB_ID(N''+ @DATABASE +''), NULL, NULL, NULL , 'DETAILED') IPS JOIN SYS.TABLES ST WITH (NOLOCK) ON IPS.OBJECT_ID = ST.OBJECT_ID JOIN SYS.INDEXES SI WITH (NOLOCK) ON IPS.OBJECT_ID = SI.OBJECT_ID AND IPS.INDEX_ID = SI.INDEX_ID WHERE ST.IS_MS_SHIPPED = 0 ORDER BY 1,5

    为了重建。

    ALTER TABLE ALL ON @table REBUILD WITH (FILLFACTOR = @fillfactor).
    

    谢谢 婴儿车

    1 回复  |  直到 14 年前
        1
  •  1
  •   SteveCav Flater    14 年前

    嗯,如果您将脚本sql放入一个名为sp_IndexStats的过程中,那么您可以编写第二个过程,如下所示:

    EXEC master..xp_cmdshell 'osql.exe -S YourServerName -U sa -P yourpassword -Q "EXEC     sp_IndexStats" -o "C:\mypath\IndexBefore.csv"'
    GO
    ALTER TABLE ALL ON @table REBUILD WITH (FILLFACTOR = @fillfactor)
    GO
    EXEC master..xp_cmdshell 'osql.exe -S YourServerName -U sa -P yourpassword -Q "EXEC sp_IndexStats" -o "C:\mypath\IndexAfter.csv"'