我必须从 sql server 表中的一些数据创建一个文本文件。我为此创建了查询。
创建文件后,我还必须创建一个触发器文件或另一个文本文件,其中包含一些信息,如行数、文件日期、名称等。除此之外,此触发器文件还必须具有文件大小信息。
我想我发现我将创建一个触发器表,并在我在数据收集查询中收集数据时使用其他信息(如行数、文件名、日期)不断更新它。但我对如何从查询中获取触发器文件的文件大小感到困惑。
我会很感激任何想法。
我必须从 sql server 表中的一些数据创建一个文本文件。我为此创建了查询。
创建文件后,我还必须创建一个触发器文件或另一个文本文件,其中包含一些信息,如行数、文件日期、名称等。除此之外,此触发器文件还必须具有文件大小信息。
我想我发现我将创建一个触发器表,并在我在数据收集查询中收集数据时使用其他信息(如行数、文件名、日期)不断更新它。但我对如何从查询中获取触发器文件的文件大小感到困惑。
我会很感激任何想法。
我个人会使用 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
但是有几个缺点:
xp_cmdshell 默认关闭。(消息 15281,级别 16,状态 1,过程 xp_cmdshell,第 1 行 SQL Server 阻止了对组件“xp_cmdshell”的过程“sys.xp_cmdshell”的访问,因为该组件作为该服务器的安全配置的一部分被关闭。系统管理员可以使用 sp_configure 启用“xp_cmdshell”的使用。有关启用“xp_cmdshell”的详细信息,请参阅 SQL Server 联机丛书中的“表面区域配置”。)
您将需要解析输出。
打开行集
select datalength(bulkcolumn) from openrowset(bulk 'c:\temp\test.txt', single_clob) a
假设它是文本文件并且您实际上并不需要操作系统报告的确切数字,您可以只计算文本文件中包含的字节数。
希望能给你一些想法。
感谢所有输入。我最终创建了一个 .net 可执行文件,它将读取文件大小并为此更新数据库。