2012-11-24 37 views
0

我有一個存儲過程,在PROC 打印某些結果等保存存儲prodeure結果作爲文件

Print '-- Start Transection--' 
Print 'Transection No = ' + @TransectionId  
... 
... 
Print 'Transection Success' 
Print '-- End Transection--' 

是能夠保存打印結果在一個文件中,同時從UI調用它。之後,我們必須將該文件郵寄給用戶,並要求下載該文件。

回答

0

PRINT用於記錄和調試目的,不應該用於返回任何內容給調用者。

這裏有一個建議:寫入一個日誌表並返回一個日誌ID,而不是PRINTing。然後,從您的應用程序中查詢此表並寫入文件。

實例:創建兩個表

CREATE TABLE Logging 
(
    LoggingID int IDENTITY(1,1) PRIMARY KEY, 
    Created datetime  
) 

CREATE TABLE LoggingDetail 
(
    LoggingDetailID int IDENTITY(1,1) PRIMARY KEY, 
    LoggingID int FOREIGN KEY REFERENCES Logging, 
    LoggingText varchar(500) 
) 

在事務開始時,創建一個新的loggingID:

INSERT INTO Logging (Created) VALUES (GETUTCDATE()) 
DECLARE @loggingID INT = @@IDENTITY 

而不是打印的記錄形式交往的,這樣做

INSERT INTO LoggingDetail (LoggingID, LoggingText) VALUES (@loggingID, 
'-- Start Transection--') 

在存儲過程結束時,將@loggingID返回給調用者。現在,您可以檢索來自LoggingDetail表的日誌信息,並將其寫入文件:

SELECT LoggingText FROM LoggingDetail WHERE LoggingID=<loggingID> ORDER BY LoggingDetailID 

可能被封裝在單獨的存儲過程中插入一個好主意。那些sprocs然後可以寫入日誌表 PRINT日誌消息。