日期:2014-05-17  浏览次数:20474 次

BCP批量导入问题
需要通过BCP将TXT数据导入SQL
现在格式FMT,数据库表都已设置好
通过BCP命令也可以导入到SQL里了,现在就是要导入的文件太多,但文件名都有固定的格式,为:121024095959,121024105959(意思为12年10月24日9:59:59),以此类推。

就在想如何做个自动化导入,现在就是文件名不同,但有规律不知可否做个变量来用到BCP命令里。求助啊~~~~
------最佳解决方案--------------------

--只做参考用,个人不建议直接用sql来做
--用xp_cmdshell 获取指定路径下面的所有txt 文件名字放入到临时表
--然后定义一个游标逐个处理即可
CREATE TABLE #file (filepath NVARCHAR(200))
INSERT  INTO #file EXEC master..xp_cmdshell N'dir /b \\d:\txt\*.txt'

DECLARE @filepath VARCHAR(100),@sql VARCHAR(8000)
DECLARE bcp_cursor CURSOR
FOR
SELECT  N'\\d:\txt\' + filepath + '.txt' AS filepath
FROM    #file
WHERE   filepath IS NOT NULL
OPEN bcp_cursor
FETCH NEXT FROM bcp_cursor INTO @filepath;
WHILE @@FETCH_STATUS = 0
BEGIN
    SET @sql = 'bcp xx.dbo.xx in ' + @filepath + ' -c -T' 
    EXEC master..xp_cmdshell  @FullName
FETCH NEXT FROM bcp_cursor INTO @filepath;
END 
CLOSE bcp_cursor;
DEALLOCATE bcp_cursor; 


------其他解决方案--------------------
----这样?
declare @sTime varchar(12) --start 
declare @eTime varchar(12) --end
declare @FileName varchar(100) --
declare @FullName varchar(100)

while @sTime <=@eTime
begin
set @FileName='d:\'+@sTime
        set @FullName='bcp xx.dbo.xx in '+@FileName+'.txt -c -T' 
EXEC master..xp_cmdshell @FullName
print  @FileName+' bcp success...'
set @sTime=@sTime+1 --递增规律??
end

------其他解决方案--------------------
你用cmd命令来遍历这些文件咯,不过我不懂怎么写
------其他解决方案--------------------
2楼代码有点意思,我先试试,看看结果,万分感谢哈~~
------其他解决方案--------------------
请问,我在单独运行 EXEC master..xp_cmdshell  这条命令时出现错误,报错为:

Error=[Microsoft][SQL Server Native Client 10.0]Unable to open BCP host Data-file

不知何解。
(在cmd里可以正确运行这条命令,命令格式为:bcp weblogdb.dbo.weblog in d:\8e6_ftp\shadow.log.121008085959 -T -f d:\8e6_import\weblog.fmt)
------其他解决方案--------------------
 权限问题,用户没有足够的权限
------其他解决方案--------------------
是指什么权限呢,用的是administrator,对文件没有设置过权限,是对sql里的table编辑权限吗???