存储过程消息输出到文件

时间:2013-03-04 05:53:00

标签: sql-server ssis

平台:SQL Server 2012

我有两个存储过程,它们接收一个注册号,然后根据该注册号,它打印出一堆HTML和XML。在proc中,有一堆打印语句在SSMS中运行时会在Messages区域中吐出。

效果很好,我真的不喜欢它是这样设计的,但我继承了,他们希望它有效。

我希望此过程运行并将消息内容吐出到文件中。理想情况下,它还会在运行后将文件重命名为注册号。

长话短说,可以将SQL语句的Messages部分输出到文件中。

SSIS?还是一些简单的BCP存储过程命令?有人碰到这个吗?

2 个答案:

答案 0 :(得分:0)

您可以使用execute spWriteStringToFile。 在此处找到:https://www.simple-talk.com/code/WorkingWithFiles/spWriteStringTofile.txt

ALTER PROCEDURE spWriteStringToFile
 (
@String Varchar(max), --8000 in SQL Server 2000
@Path VARCHAR(255),
@Filename VARCHAR(100)

--
)
AS
DECLARE  @objFileSystem int
        ,@objTextStream int,
        @objErrorObject int,
        @strErrorMessage Varchar(1000),
        @Command varchar(1000),
        @hr int,
        @fileAndPath varchar(80)

set nocount on

select @strErrorMessage='opening the File System Object'
EXECUTE @hr = sp_OACreate  'Scripting.FileSystemObject' , @objFileSystem OUT

Select @FileAndPath=@path+'\'+@filename
if @HR=0 Select @objErrorObject=@objFileSystem , @strErrorMessage='Creating file "'+@FileAndPath+'"'
if @HR=0 execute @hr = sp_OAMethod   @objFileSystem   , 'CreateTextFile'
    , @objTextStream OUT, @FileAndPath,2,True

if @HR=0 Select @objErrorObject=@objTextStream, 
    @strErrorMessage='writing to the file "'+@FileAndPath+'"'
if @HR=0 execute @hr = sp_OAMethod  @objTextStream, 'Write', Null, @String

if @HR=0 Select @objErrorObject=@objTextStream, @strErrorMessage='closing the file "'+@FileAndPath+'"'
if @HR=0 execute @hr = sp_OAMethod  @objTextStream, 'Close'

if @hr<>0
    begin
    Declare 
        @Source varchar(255),
        @Description Varchar(255),
        @Helpfile Varchar(255),
        @HelpID int

    EXECUTE sp_OAGetErrorInfo  @objErrorObject, 
        @source output,@Description output,@Helpfile output,@HelpID output
    Select @strErrorMessage='Error whilst '
            +coalesce(@strErrorMessage,'doing something')
            +', '+coalesce(@Description,'')
    raiserror (@strErrorMessage,16,1)
    end
EXECUTE  sp_OADestroy @objTextStream
EXECUTE sp_OADestroy @objTextStream

关于它的完整文章:https://www.simple-talk.com/sql/t-sql-programming/reading-and-writing-files-in-sql-server-using-t-sql/

答案 1 :(得分:0)

用SELECT语句替换所有PRINT语句,然后将每个SELECT语句发送到表。然后,我们使用SSIS正确地构建一个HTM文件。