如何为每次执行将过程结果存储在 SQL Server 中的新(单个)文本文件中

Posted

技术标签:

【中文标题】如何为每次执行将过程结果存储在 SQL Server 中的新(单个)文本文件中【英文标题】:How to store results from procedure in a new (individual) text file in SQL Server for each execution 【发布时间】:2019-06-19 14:23:33 【问题描述】:

下面是我的代码,它将我的 sql 结果打印到文本文件。 我的问题是:如何为每次执行创建新的文本文件,而不是将结果附加到已创建的相同文本文件中?

我正在尝试添加 >> 但它只会将结果附加到相同的文本中。

需要帮助,这不是重复的问题,因为旧问题显示了如何在同一个文本文件中写入结果,但对于我的问题,我需要创建新的,并且不想覆盖旧的文本文件。

Declare @fn varchar(8000) = 'C:\Tmp\log\out.txt';
Declare @cmd varchar(8000);

DECLARE @viewObjectIds TABLE (object_id INT);
INSERT INTO @viewObjectIds
  SELECT o.object_id
    FROM sys.objects AS o
      WHERE o.type = 'V';

DECLARE view_cursor CURSOR FAST_FORWARD FOR
   SELECT object_id FROM @viewObjectIds;

OPEN view_cursor;
FETCH NEXT FROM view_cursor INTO @object_id;

WHILE @@FETCH_STATUS = 0
BEGIN
 SELECT @command =
   'EXECUTE sp_refreshview '''
   + QUOTENAME(OBJECT_SCHEMA_NAME(@object_id)) + '.' + QUOTENAME(OBJECT_NAME(@object_id))
   + ''';';

 PRINT @command;
 SELECT @cmd  = 'echo '+ @command + ' >> '+ @fn + '' ;         
 exec xp_cmdshell @cmd
  FETCH NEXT FROM view_cursor INTO @object_id;
END

【问题讨论】:

能不能加个存储过程,方便帮到你 解决方案是每次运行存储过程并写入该文件时动态创建一个新文件名。如果您提供存储过程的源代码,这里的人可以为您提供帮助。 我刚刚添加了我的存储过程 我的问题不同,因为我不想将程序存储在同一个文本文件中,但每次执行都需要一个新的文本文件。感谢您的帮助 【参考方案1】:

您可以将 CURRENT_TIMESTAMP 连接到 out.txt 文件名。将为每次执行创建一个新文件的简单解决方案。

编辑:

Declare @fn varchar(8000) = 'C:\Tmp\log\' + convert(varchar(25), current_timestamp, 120) + 'out.txt';

【讨论】:

感谢您的帮助。但是你能给我一个例子吗?我试过了,但似乎我不知道如何将这个函数与文件名一起使用。谢谢 声明@fn varchar(8000) = 'C:\Tmp\log\' + convert(varchar(25), current_timestamp, 120) + 'out.txt';

以上是关于如何为每次执行将过程结果存储在 SQL Server 中的新(单个)文本文件中的主要内容,如果未能解决你的问题,请参考以下文章

sql serve创建存储过程,查询指定学生的学号、姓名、课程名、成绩

如何为用户(已经 dbo)授予存储过程的执行权限以运行 s-s-rS 报告

oracle存储过程连续执行结果不同

我如何用JAVA调用存储过程取得 serveroutput?

这是不是可以在 PL/SQL 中执行存储过程时每次都提示?

VB调用SQL存储过程异步执行问题