从 4000 多个具有相应名称的文件批量插入到 4000 多个表中

Bulk insert into 4000+ tables from 4000+ files with corresponding name

我有一个包含 4000 多个竖线分隔文件的文件夹,这些文件的名称与架构中的 tables 相同。

我正在尝试这样做

DECLARE @tableName varchar(max)
DECLARE @sqlCommand varchar(max)
DECLARE @path varchar(20)
SET @path =  'x:\xfer\'

DECLARE tNames CURSOR
FOR
    SELECT table_name FROM information_schema.tables
    WHERE TABLE_TYPE='BASE TABLE'
    AND TABLE_NAME = 'sales_time_pd'
    ORDER BY TABLE_NAME

OPEN tNames
    FETCH  FROM tNames
        INTO @tableName

        WHILE @@FETCH_STATUS = 0
            BEGIN

               SET @sqlCommand = 'BULK INSERT @tableName
               FROM @path + @tableName
               WITH 
                  (
                     FIELDTERMINATOR ='' |'',
                     ROWTERMINATOR ='' |\n''
                  );'

                EXEC(@sqlCommand)


                FETCH NEXT FROM tNames
                into @tableName
            END
CLOSE tNames;   
DEALLOCATE tNames;

我正在粗略地寻找概念,请原谅我对撇号的错误使用

作为测试,我将针对单个 file/table 进行批量插入。我了解到 table 名称需要是静态的。

那么如何从具有相应名称的文件目录中批量插入 table 的集合?

您似乎在错误地连接 SQL 字符串尝试类似的操作:

SET @sqlCommand = 'BULK INSERT '+@tableName+' FROM '''+@path + @tableName+''' 

如果您在选项卡中使用特殊字符,您也可以尝试:

SET @sqlCommand = 'BULK INSERT ['+@tableName+'] FROM '''+@path + @tableName+''' 

您可以通过将 EXEC(@sqlCommand) 替换为 print @sqlCommand 来验证是否正确连接了 sql 命令。获取打印的命令并尝试 运行 它,如果出现错误,请获取消息并查看其含义并尝试修复语法。

通过动态构建一个 SQL 字符串,您可以使用 @Variable table 名称并使其成为连接到命令中的静态文字。