2013-08-06 179 views
0

我需要您的支持才能提出解决方案。如何将存储过程输出导出到文本文件

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

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

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

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

谢谢

+0

为什么这个标记SQL Server和MySQL的?你正在使用哪个数据库? –

+0

它应该可能是MSSQL ...你知道这里的工作如何 – OzrenTkalcecKrznaric

回答

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

  • underneath结果窗格中,在保存类型单击鼠标右键,选择结果另存为...
  • 选择CSV

EDIT 2

如果你想有一个信息在输出临时表哪里你的数据来自(哪个SP),你可以添加另一列到你的SP中,以便对INSERT ... EXEC语句有一点控制。

如果您希望这样做,但无法控制SP输出,一种方法是控制#output的默认值,另一种方法是对另一个临时表中的中间结果进行dd操作。我将使用第二个:

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

    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

  • 下方在R esults窗格中,右键单击并选择结果另存为...
  • 下保存类型选择CSV
+0

嗨Ozren,谢谢你的评论。但是我需要不同的方法,因为我必须手动运行所有10个SP。 – Venki

+0

有没有其他方法可以让我们从SP中获得输出? – Venki

+0

见更新答案 – OzrenTkalcecKrznaric

相关问题