我有一个存储过程,在 proc 中 打印某些结果,例如
Print '-- Start Transection--'
Print 'Transection No = ' + @TransectionId
...
...
Print 'Transection Success'
Print '-- End Transection--'
从 UI 调用时是否可以将打印结果保存在文件中。之后我们必须将该文件邮寄给用户并要求下载该文件
我有一个存储过程,在 proc 中 打印某些结果,例如
Print '-- Start Transection--'
Print 'Transection No = ' + @TransectionId
...
...
Print 'Transection Success'
Print '-- End Transection--'
从 UI 调用时是否可以将打印结果保存在文件中。之后我们必须将该文件邮寄给用户并要求下载该文件
PRINT 用于记录和调试目的,不应用于向调用者返回任何内容。
这里有一个建议:不要打印,而是写入日志表并返回一个 loggingID。然后,从您的应用程序中查询此表并写入文件。
示例:创建两个表
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
将 INSERT 封装在单独的存储过程中可能是个好主意。然后这些存储过程可以写入日志表并打印日志消息。