【发布时间】:2019-01-28 16:32:43
【问题描述】:
我正在从事的一个项目涉及修改其中一个子系统以将当前存储在文件中的数据存储/提取到数据库中。每个文件都是由另一个自定义工具生成的单个、有时很大的自定义(基于 xml)脚本块。
从概念上讲,我正在寻找一种简单的方法来执行以下操作:
For Each file in folder_and_subfolders
INSERT INTO table
(script_name, version_num, script )
VALUES
({file_name}, 1, {file_contents})
;
Next
最好同时在整个目录树上。
如果没有简单的方法通过 T-SQL 做到这一点,我可以编写一个实用程序来完成这项工作,但我更喜欢不需要编写另一个自定义工具的东西用过一次。
【问题讨论】:
-
SSIS 可以很容易地使用 For Each 循环容器来实现这一点;并且是 SQL Server Standard+ 的一部分。 T-SQL(单独使用)可能更难实现这一目标。
-
是的,没有。你当然可以通过启用
xp_cmdshell来读取和读取文件,然后你会看到一些讨厌的游标循环来处理这些命令的结果。如果可以的话,反转控制流并从客户端执行此操作——您不需要为此编写单独的工具; PowerShell 应该可以在任何最近的 Windows 服务器上使用,包括 SQL Server 本身。 (以我个人的拙见和经验:避免像瘟疫一样避免 SSIS,尽管我承认在这种情况下这是一种选择。) -
@EzLo,我不认为这是重复的。这不是包含要插入到表的多行中的批量数据的文件。这是多个文件,每个文件包含一条数据
-
至少this help 是如何引用文件内容的吗?您仍然需要弄清楚如何遍历所需的所有文件,但也许它可能是 sqlcmd 和该答案中引用的查询以及批处理或 powershell 脚本的组合。
标签: sql-server