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

时间:2010-11-28 22:12:19

标签: tsql sql-server-2008 ssis

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

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

我想将此作为代理工作安排。

现在我的要求为:

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

  2. 重建索引

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

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

    我如何自动化

    的过程
    1. 重建前的索引统计信息
    2. 重建
    3. 重建后的统计数据。
    4. 我正在使用此脚本进行统计。

      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).
      

      感谢 prav

1 个答案:

答案 0 :(得分:1)

嗯,如果你把你的脚本sql放到一个名为sp_IndexStats的proc中,那么你可以编写一个看起来像这样的第二个proc:

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"'
相关问题