如何将存储过程输出导出到文本文件

时间:2013-08-06 11:04:22

标签: sql sql-server sql-server-2008 tsql stored-procedures

我需要您的支持才能提出解决方案。

我有10个不同的存储过程集,我必须将其导出到文本文件中,所有10个过程都将返回相同的列集(只有调用参数不同)。

我没有得到解决方案怎么做?

您能否帮我理解如何将数据从存储过程输出导出到制表符分隔的文本文件?

如果可能,也可以在SSIS包中告诉我。

由于

1 个答案:

答案 0 :(得分:3)

这里的简单解决方案。

对于每个SP:

  • 在Management Studio中执行SP
  • 在“结果窗格”下方,右键单击并选择“将结果另存为...”
  • 保存类型下的
  • 选择CSV

最后,在记事本中打开每个文件,然后简单地连接结果。

修改

如果您有例如10个存储过程,您可以执行以下操作:

  • 为输出创建临时表

    CREATE TABLE #output (...)
    
  • 使用10 INSERT...EXEC来填充临时表

    INSERT INTO #output EXEC MySP1 ...
    GO
    INSERT INTO #output EXEC MySP2 ...
    GO
    INSERT INTO #output EXEC MySP3 ...
    GO
    ...
    INSERT INTO #output EXEC MySP10 ...
    GO
    
  • 执行查询SELECT * FROM #output

  • 在“结果窗格”下方,右键单击并选择“将结果另存为...”
  • 保存类型下的
  • 选择CSV

编辑2

如果您希望在输出临时表中有数据来自哪个(哪个SP),您可以在SP中添加另一列,以便对INSERT ... EXEC语句进行一些控制。

如果您希望这样做但无法控制SP输出,一种方法是控制#output的默认值,另一种方法是使用另一个临时表来获取中间结果。我会用第二个:

  • 为输出创建临时表,例如你的表名作为标识符。

    CREATE TABLE #output (spname sysname, ...)
    
  • 为中间结果创建临时表

    CREATE TABLE #temp (...)
    
  • 使用10 INSERT...EXEC来填充中间表然后输出表

    TRUNCATE TABLE #temp
    INSERT INTO #temp EXEC MySP1 ...
    GO
    INSERT INTO #output
    SELECT spname = 'MySP1', * FROM #temp
    GO
    
    TRUNCATE TABLE #temp
    INSERT INTO #temp EXEC MySP2 ...
    GO
    INSERT INTO #output
    SELECT spname = 'MySP2', * FROM #temp
    GO
    ...
    
  • 执行查询SELECT * FROM #output

  • 在“结果窗格”下方,右键单击并选择“将结果另存为...”
  • 保存类型下的
  • 选择CSV