从 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 名称并使其成为连接到命令中的静态文字。
我有一个包含 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 名称并使其成为连接到命令中的静态文字。