我有一个包含4000多个管道分隔文件的文件夹,其名称与模式中的表名相同。
我正在尝试这样做
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;
我正在寻找这个概念,请原谅我对撇号的错误使用
作为测试,我定位单个文件/表来执行批量插入。我了解到表名必须是静态的。
那么如何从具有相应名称的文件目录中批量插入表的集合?
答案 0 :(得分:1)
您看起来像是在错误地连接SQL字符串尝试类似:
SET @sqlCommand = 'BULK INSERT '+@tableName+' FROM '''+@path + @tableName+'''
如果您在标签中使用特殊字符;您也可以尝试使用:
SET @sqlCommand = 'BULK INSERT ['+@tableName+'] FROM '''+@path + @tableName+'''
您可以通过将EXEC(@sqlCommand)
替换为print @sqlCommand
来验证您是否正确连接了sql命令。获取打印的命令并尝试运行它,如果出现错误,请接收消息并查看其含义并尝试修复语法。
通过动态构建SQL字符串,您可以获取@Variable表名,并使其成为连接到命令中的静态文字。