如何将 SQL Server 存储过程的输出存储在.txt文件中



我有这个存储过程;我正在 SSMS 中打印变量的值。 相反,我想将此结果存储在.txt文件中。

注意:我不想使用右键单击结果然后将结果另存为的 SSMS 选项来执行此操作。我希望直接在存储过程本身中使用任何SQL代码/内置函数来完成它。

CREATE PROCEDURE [dbo].[usp_printresulttofile]
AS
BEGIN
DECLARE @var NVARCHAR(MAX) = ''
SET @var = 'print this data in txt file'
PRINT 'Data is : ' + @var   
/* SQL query here to store result of Print statement in text file */
END
EXEC [dbo].[usp_printresulttofile]

在此处共享更新的工作 SP,以便对具有类似要求的人有用 谢谢@David Browne - Microsoft

ALTER PROCEDURE [dbo].[usp_printresulttofile]
AS
BEGIN
DECLARE @fileTimeStamp varchar(200) =  convert(varchar,getDate(), 112 )+'_'+ Replace(convert(varchar,getDate(), 114 ),':','')  -- select convert(varchar, getdate(), 121)
DECLARE @fileExtension varchar(5) = 'txt'
DECLARE @var NVARCHAR(MAX) = ''
SET @var = 'print this data in txt file'
PRINT 'Data is : ' + @var   

declare @fn varchar(500) = 'c:/log/SP_output_'+@fileTimeStamp+'.'+@fileExtension;
declare @cmd varchar(8000) = concat('echo ', @var, ' > "', @fn, '"');
print @cmd 
exec xp_cmdshell @cmd,  no_output
set @cmd  = concat('type "', @fn, '"');
print @cmd 
exec xp_cmdshell @cmd;
END
GO

正如评论和其他答案所示,这通常不是一个好主意。 但无论如何,这是如何做到这一点的,假设你是SQL Server上的系统管理员。:)

-- To allow advanced options to be changed.  
EXEC sp_configure 'show advanced options', 1;  
GO  
-- To update the currently configured value for advanced options.  
RECONFIGURE;  
GO  
-- To enable the feature.  
EXEC sp_configure 'xp_cmdshell', 1;  
GO  
-- To update the currently configured value for this feature.  
RECONFIGURE;  
GO
CREATE OR ALTER PROCEDURE [dbo].[usp_printresulttofile]
AS
BEGIN
DECLARE @var NVARCHAR(MAX) = ''
SET @var = 'print this data in txt file'
PRINT 'Data is : ' + @var   
declare @fn varchar(200) = 'c:tempout.txt';
declare @cmd varchar(8000) = concat('echo ', @var, ' > "', @fn, '"');
print @cmd 
exec xp_cmdshell @cmd,  no_output
set @cmd  = concat('type "', @fn, '"');
print @cmd 
exec xp_cmdshell @cmd;

END
go
EXEC [dbo].[usp_printresulttofile]

我可能会建议创建一个批处理文件来完成此操作。 您可以简单地执行此操作:

sqlcmd -i ExecSQLProc.sql > Results.txt

将 EXEC 命令保存在名为ExecSQLProc.sql的文件中,然后使用上述行创建批处理脚本。如果需要,您还可以将其附加到调度程序,以便您可以定期生成这些脚本。 您还可以创建一个进程,仅使用SQL服务器将进程生成的任何内容输出到电子邮件中,并以这种方式查看结果。

通常,我发现使用操作系统操作单个文件更好,如果要附加结果,可以选择:

  1. sqlcmd -i ExecSQLProc.sql >> CumulativeResults.txt
  2. 更新存储进程以跟踪大型容器(例如 blob(数据库中的数据,然后在执行脚本时,它将生成一个包含所有内容的文件。

使用 bcp 命令将数据复制到任何格式。您只需要提及所需的格式即可。喜欢 .text

bcp 'select * from table' queryout c:\sql\bcp.txt -c -T

以下链接中的示例和解释:- https://www.mssqltips.com/sqlservertip/4353/export-sql-server-records-into-individual-text-files/

只要记住要小心字符串进入文本文件。 如果它有引号/双引号等,它将影响其保存能力。 我自动在我的传出字符串周围加上双引号,这通常会有所帮助,但如果您的字符串更复杂(即具有文字比较的 SQL 查询(,那么您可能有更多的工作要做。

最新更新