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

Tsql 将sql代理作业结果导出到.csv文件,tsql,sql-server-2008,ssis,Tsql,Sql Server 2008,Ssis,作为性能优化,我对数据库进行了索引重建 我在@TABLE REBUILD上使用了ALTERTABLE ALL(FILLFACTOR=@FILLFACTOR) 我想把这个安排成一个代理工作 现在我的要求是: 在重建索引之前,我需要将索引统计数据导出到csv文件 重建索引 重建索引后,索引导出到csv文件的统计信息 我在代理作业中使用了重建索引脚本,并手动执行了索引统计查询,以查看代理作业前后的状态 我需要如何自动执行 重建前索引统计数据 重建 重新编译后的统计数据 我使用这个脚本进行统计 DECL

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

我在@TABLE REBUILD上使用了ALTERTABLE ALL(FILLFACTOR=@FILLFACTOR)

我想把这个安排成一个代理工作

现在我的要求是:

  • 在重建索引之前,我需要将索引统计数据导出到csv文件

  • 重建索引

  • 重建索引后,索引导出到csv文件的统计信息

  • 我在代理作业中使用了重建索引脚本,并手动执行了索引统计查询,以查看代理作业前后的状态

    我需要如何自动执行

  • 重建前索引统计数据
  • 重建
  • 重新编译后的统计数据
  • 我使用这个脚本进行统计

    DECLARE@DATABASE VARCHAR(10)='AdventureWorksDW2008'
    选择对象名称(IPS.OBJECT\u ID)作为[表名],
    SI.NAME作为[索引名称],
    IPS.INDEX\u TYPE\u DESC,
    IPS.AVG_碎片(单位:百分比),
    IPS.AVG_片段_大小_(单位:页),
    IPS.AVG\u页面空间使用百分比,
    IPS.RECORD_计数,
    IPS.GHOST\u记录\u计数,
    IPS.U计数,
    IPS.AVG_碎片_大小_英寸页面
    从SYS.DM_DB_INDEX_PHYSICAL_STATS(DB_ID(N'+@DATABASE++''),NULL、NULL、NULL、“DETAILED”)ip
    将SYS.ST表与IPS.OBJECT\u ID=ST.OBJECT\u ID上的(NOLOCK)连接
    在IPS.OBJECT\u ID=SI.OBJECT\u ID和IPS.INDEX\u ID=SI.INDEX\u ID上使用(NOLOCK)连接SYS.INDEX SI
    其中ST.IS_m_装运=0
    按1,5订购

    以及重建

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

    嗯,如果您将脚本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"'
    

    谢谢你,我用另一种方式创建了一个SSIS包,它解决了这个问题,但是你的解决方案比我实现的要简单得多,但是这种方法没有性能问题,但是你的方法启发了我。谢谢