我正在寻找更好的方法来尝试解决此问题,因为我当前的解决方案非常耗时且效率低下。TSQL批量插入:使用源文件名填充列
我有许多文本文件,都包含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或至少以更有效的方式做到这一点?
非常感谢
你有没有考虑使用SSIS像这样的工作吗?当你有更复杂的工作流程等时,使用SSIS的好处变得更加明显。 –
感谢您的回复@WindsofChange。不,我没有看过SSIS路线。你能给我一个关于如何实现这个目标的粗略工作流程,然后我会去做我自己的研究吗?谢谢 – Ninja
SSIS是一个ETL(提取,转换,加载)工具。它允许你开发一个程序来加载和转换你正在加载的数据。例如,您可以加载数据源(作为参数传入,或者可以遍历文件夹并在其中加载所有内容)。您可以转换加载的数据以在列中包含硬编码值(例如数据源文件位置),然后使用该列将其批量插入到表中。 与仅编写SQL脚本相比,它涉及的内容更多,但对于受益于实际过程的ETL工作而言,它的灵活性要大得多。 –