如何将文件内容作为数据导入表列

时间:2019-01-28 16:32:44

标签: sql-server

我正在工作的一个项目涉及修改一个子系统,以将当前存储在文件中的数据存储/拉入数据库。每个文件都是由另一个自定义工具生成的单个(有时很大)自定义脚本(基于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进行此操作的简便方法,我可以编写一个实用程序来完成这项工作,但是我希望不需要编写另一种自定义工具的东西使用一次。

1 个答案:

答案 0 :(得分:0)

因此,我没有安装SQL Server,因此无法对此进行测试,但是,如果您正在寻找一个简单的批处理文件来完成您要执行的操作,那么我建议您执行以下操作帮助;

@echo off

SET xmldir=./myxmlfiles/live/here/

echo --- Processing files

for %%f in ("%xmldir%*.xml") do (echo Running %%f.... && @sqlcmd -I -U %1 -P %2 -S %3 -d %4 -v filename="%xmldir%%%f" -i ProcessFile.sql)

我不确定您对sqlcmd的了解是多少,但这是SQL Server通常提供的命令行工具。它将允许您运行SQL命令,或者在上述情况下,运行-i参数指示的脚本。我假设您将SQL语句放在其中以对表执行添加操作。

sqlcmd的其他参数如下所述;

-I将QUOTED_IDENTIFIER设置为打开(您可能需要也可能不需要。I did对于我面对sqlcmd和QUOTED_IDENTIFIER的早期问题)

-U设置数据库用户名

-P设置数据库密码

-S设置数据库服务器

-d设置要连接的数据库

-v在这里很有趣,因为它使您可以将参数传递给脚本。请注意,在描述此的MSDN page上,它指出如果路径或文件名包含空格,则需要将其用引号引起来,因此请检查一下。不过基本上,您可以引用sql脚本(ProcessFile.sql)中的参数,例如INSERT INTO mytable (file_name) VALUES ('$(filename)')

您必须使用我之前的评论中的答案中所述的逻辑来确保