0

我必须从 sql server 表中的一些数据创建一个文本文件。我为此创建了查询。

创建文件后,我还必须创建一个触发器文件或另一个文本文件,其中包含一些信息,如行数、文件日期、名称等。除此之外,此触发器文件还必须具有文件大小信息。

我想我发现我将创建一个触发器表,并在我在数据收集查询中收集数据时使用其他信息(如行数、文件名、日期)不断更新它。但我对如何从查询中获取触发器文件的文件大小感到困惑。

我会很感激任何想法。

4

2 回答 2

1

我个人会使用 Powershell 来执行需要与 Windows 交互的任务,但这不是很有趣是吧。

我能想到两种基于 SQL 的解决方案:

xp_cmdshell

exec xp_cmdshell 'dir c:\temp\test.txt'

  Output
  Volume in drive C is System
  Volume Serial Number is A227-BF7F
  NULL
  Directory of c:\temp
  NULL
  26/04/2013  10:52 AM                20 test.txt
                1 File(s)             20 bytes
                0 Dir(s)  214,210,105,344 bytes free
  NULL

但是有几个缺点:

  1. xp_cmdshell 默认关闭。(消息 15281,级别 16,状态 1,过程 xp_cmdshell,第 1 行 SQL Server 阻止了对组件“xp_cmdshell”的过程“sys.xp_cmdshell”的访问,因为该组件作为该服务器的安全配置的一部分被关闭。系统管理员可以使用 sp_configure 启用“xp_cmdshell”的使用。有关启用“xp_cmdshell”的详细信息,请参阅 SQL Server 联机丛书中的“表面区域配置”。)

  2. 您将需要解析输出。

打开行集

select datalength(bulkcolumn) from openrowset(bulk 'c:\temp\test.txt', single_clob) a

假设它是文本文件并且您实际上并不需要操作系统报告的确切数字,您可以只计算文本文件中包含的字节数。

希望能给你一些想法。

于 2013-04-26T01:03:46.693 回答
0

感谢所有输入。我最终创建了一个 .net 可执行文件,它将读取文件大小并为此更新数据库。

于 2013-05-02T15:53:02.873 回答