【问题标题】:How to execute one stored procedure from another one and save result as CSV file如何从另一个存储过程执行一个存储过程并将结果保存为 CSV 文件
【发布时间】:2015-05-21 06:31:19
【问题描述】:

我有一个存储过程,它为我带来了一些来自连接表的数据。

有时客户希望我们以 CSV 格式导出这些数据,这些数据可以通过打开为 excel 文件轻松管理。

所以我想创建另一个过程,它将调用给定的存储过程并将结果保存为 CSV 文件。

【问题讨论】:

  • 请在您的问题中添加示例,不要将它们作为答案发布。哦..你只是在回答你自己的问题,对吧。
  • 对不起,我只是问了问题并回答了。

标签: sql-server stored-procedures export-to-csv sql-server-2014


【解决方案1】:

开始吧。

这是我们的第一个存储过程

CREATE PROCEDURE [dbo].[stpCOUNTRIES]

AS

BEGIN  
    BEGIN TRY 
        SELECT  NAMES,CODES FROM COUNTRIES 

    END TRY

    -- ---------------------------------
    -- ERROR HANDLING
    -- ---------------------------------
    BEGIN CATCH
        Declare @ErrMsg   nvarchar(200) = ERROR_MESSAGE(),
                @ErrLine  int = ERROR_LINE(),
                @ErrNum   int = ERROR_NUMBER(),
                @ErrSev   int = ERROR_SEVERITY(),
                @ErrState int = ERROR_STATE(),
                @ErrProc  sysname = ERROR_PROCEDURE();
        RAISERROR('ERROR in [%s] Line %d, ErrNo %d, Message: %s', @ErrSev, @ErrState, @ErrProc, @ErrLine, @ErrNum, @ErrMsg);
        RETURN @ErrNum;
   END CATCH
   RETURN 0;
END

现在我想创建另一个存储过程,它将执行第一个并将结果保存为 CSV

所以这是我们的第二个存储过程:

CREATE PROCEDURE [dbo].[stpEXPORT_COUNTRIES]
AS

BEGIN  
    BEGIN TRY 

     DECLARE @FileName AS NVARCHAR(50)='PutFileName.CSV';
     DECLARE @Path AS NVARCHAR(50)=' C:\\PutPathWhereYouWantToSaveFile';

     declare @sql varchar(8000)select @sql = 'bcp "EXEC YourDatabaseName.dbo.stpCOUNTRIES" queryout '+@Path+@FileName+' /w /t, -T -S' + @@servername 
     exec master..xp_cmdshell @sql

    END TRY
    BEGIN CATCH
        Declare @ErrMsg   nvarchar(200) = ERROR_MESSAGE(),
                @ErrLine  int = ERROR_LINE(),
                @ErrNum   int = ERROR_NUMBER(),
                @ErrSev   int = ERROR_SEVERITY(),
                @ErrState int = ERROR_STATE(),
                @ErrProc  sysname = ERROR_PROCEDURE();
        RAISERROR('ERROR in [%s] Line %d, ErrNo %d, Message: %s', @ErrSev, @ErrState, @ErrProc, @ErrLine, @ErrNum, @ErrMsg);
        RETURN @ErrNum;
   END CATCH
   RETURN 0;
END

*CSV文件的编码为UTF8

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-03
    • 1970-01-01
    • 2010-11-14
    • 2010-09-15
    • 1970-01-01
    • 2014-09-17
    相关资源
    最近更新 更多