TSQL BULK INSERT:使用源文件名填充列

时间:2016-01-20 16:39:29

标签: sql tsql sql-server-2008-r2 bulkinsert

我正在寻找一种更好的方法来尝试解决这个问题,因为我目前的解决方案非常耗时且效率低下。

我有许多文本文件都包含1列。

我使用BULK INSERT将该信息加载到SQL表中,但我希望能够从哪个文件中加载数据并将其填充到列中。

现有的工作流程是在文本编辑器中创建一系列BULK INSERT和UPDATE语句,然后依次运行它们,如下所示:

现有工作流程

    CREATE TABLE #TEMP(MYDATA VARCHAR(MAX), FILENAME VARCHAR(MAX))

    BULK INSERT #TEMP FROM 'C:\MYFILE_1.TXT' WITH (FORMATFILE = 'C:\FORMATFILE.FRM')

    UPDATE #TEMP SET FILENAME = 'MYFILE_1.TXT' WHERE FILENAME IS NULL

    BULK INSERT #TEMP FROM 'C:\MYFILE_2.TXT' WITH (FORMATFILE = 'C:\FORMATFILE.FRM')

    UPDATE #TEMP SET FILENAME = 'MYFILE_2.TXT' WHERE FILENAME IS NULL

    BULK INSERT #TEMP FROM 'C:\MYFILE_3.TXT' WITH (FORMATFILE = 'C:\FORMATFILE.FRM')

    UPDATE #TEMP SET FILENAME = 'MYFILE_3.TXT' WHERE FILENAME IS NULL

这是一个非常糟糕的工作流程,并且越多越慢,越多的行插入到表中。

在进行BULK INSERT时,或者至少以更有效的方式,有没有人有办法做到这一点?

非常感谢

1 个答案:

答案 0 :(得分:0)

与大多数问题一样,我确信有很多有效的方法可以做到这一点。但是,我会通过将文件名声明为变量,然后在批量插入中插入文件名来动态执行此操作。 这可能会有点复杂,并且可以使用Cursor Loop完成。

另一种选择是在txt文件中添加一个等于文件名的列。我相信这可以通过powershell等编写脚本。

我知道我的回答很模糊,如果你想要一些例子,请告诉我