SSIS导入文件的布局不断变化

时间:2016-02-16 16:19:35

标签: tsql ssis

我正在使用SSIS 2008并尝试使用包来将指定文件导入为其布局创建的表中。它将接收目的地表&源文件作为包变量。

我遇到的主要问题是文件布局可能会发生变化,但它们并不一致。我要导入的表格将匹配该文件。我初步成功,但在更改源文件/目标后不久就会抛出vs_needsnewmetadata错误。

是否发现了任何可能在此处使用的解决方案,以确定不适合包设计的布局的文件?

编辑:这些是.txt文件,以制表符分隔。 Edit2:尝试摆弄OPENROWSET,在我们的服务器上遇到安全错误。

1 个答案:

答案 0 :(得分:1)

我在这里假设所述文件是CSV文件。

几周前我刚刚面临同样的问题。您需要使用动态SQL来实现此目的。

使用以下代码在数据库上创建存储过程(将2" C:\ Folder \"位置更改为文件位置):

CREATE PROCEDURE [dbo].[CreateAndImportCSVs] (@FILENAME NVARCHAR(200))
AS
BEGIN
SET NOCOUNT ON;

DECLARE @PATH NVARCHAR(4000) = N'C:\Folder\' + @FILENAME + ''
DECLARE @TABLE NVARCHAR(50) = SUBSTRING(@FILENAME,0,CHARINDEX('.',@FILENAME))
DECLARE @SQL NVARCHAR(4000) = N'IF OBJECT_ID(''dbo.' + @TABLE + ''' , ''U'') IS NOT NULL DROP TABLE dbo.[' + @TABLE + ']
                                SELECT * INTO [' + @TABLE + ']
                                FROM OPENROWSET(''MSDASQL''
                                               ,''Driver={Microsoft Access Text Driver (*.txt, *.csv)};DefaultDir=C:\Folder;''
                                               ,''SELECT * FROM ' + @FILENAME + ''')'

EXEC(@SQL)


END

您可能需要从以下位置下载Microsoft Access数据库引擎: https://www.microsoft.com/en-gb/download/details.aspx?id=13255 并安装在您的计算机/服务器上以使Microsoft Access Text Driver正常工作。

然后在SSIS中创建一个执行SQL任务,其中包含与SQL Server数据库相关的连接详细信息。然后将文件名传递给您创建的存储过程:

EXEC dbo.CreateAndImportCSVs 'filename.csv'

然后,它将根据CSV中包含的结构和数据创建表,它还将表命名为与csv文件名相同。

*此存储过程也可用于运行文件列表。

希望这有帮助!