首页 > 解决方案 > 如何为每次执行将过程结果存储在 SQL Server 中的新(单个)文本文件中

问题描述

下面是我的代码,它将我的 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

标签: sql-server

解决方案


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

编辑:

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

推荐阅读