如何在动态表中导入sql中的txt文件

时间:2014-08-15 18:33:27

标签: sql sql-server stored-procedures dynamic import

我试图在表格中导入具有不同标题的txt文件。我试过这段代码,但我知道这是错的。

declare @fecha as date
set @fecha = '02/28/2014'
declare @varfecha as varchar(20)
set @varfecha= convert(varchar(20),YEAR(@fecha))+convert(varchar(20),left(right(@fecha,5),2))
declare @sql as varchar(1000)
print @varfecha 

select @sql= 'create table ['+@varfecha+']
(ID varchar(40),
Cierre varchar(40),
  Seg1 float,
Mora1 float,
Saldo_Tarshop float,
Saldo_FD float,
Seg2 float,
Mora2 float)

bulk insert ['+@varfecha+']
from C:\Martin\T\201403\Archivos Recibidos\'+@varfecha+'.txt
WITH
( 
FIELDTERMINATOR = |,
ROWTERMINATOR = |
 )'
exec(@sql)

我认为错误可能是批量插入中的引号,因为当我尝试以下代码时,工作完美:

declare @fecha as date
set @fecha = '07/31/2014'
declare @varfecha as varchar(20)
set @varfecha= convert(varchar(20),YEAR(@fecha))+convert(varchar(20),left(right(@fecha,5),2))
declare @sql as varchar(1000)
select @sql= 'create table ['+@varfecha+']
(ID varchar(40),
Cierre varchar(40),
Seg1 float,
Mora1 float,
Saldo_Tarshop float,
Saldo_FD float,
Seg2 float,
Mora2 float)'
 exec(@sql)

我能做什么?

谢谢!

2 个答案:

答案 0 :(得分:0)

不应该是:

bulk insert ['+@varfecha+']
from 'C:\Martin\T\201403\Archivos Recibidos\' + @varfecha + '.txt'

而不是:

bulk insert ['+@varfecha+']
from C:\Martin\T\201403\Archivos Recibidos\'+@varfecha+'.txt

答案 1 :(得分:0)

没有实际错误,很难诊断,但一般来说,这些是您可能遇到的错误类型:
1. txt文件中的数据是否按照表中使用的数据类型以相同的顺序格式化?如果没有,您需要在插入之前将数据转换为正确的格式 2.您可能没有权限从SQL Server提到的路径中访问该文件 3.您的查询中使用的分隔符是否与文件中的分隔符相同[您提及' |'作为行终止符。这应该是' | \ n'
4.批量插入的语法如下:

 declare @fecha as date
set @fecha = '02/28/2014'
declare @varfecha as varchar(20)
set @varfecha= convert(varchar(20),YEAR(@fecha))+convert(varchar(20),left(right(@fecha,5),2))
declare @sql as varchar(1000)
print @varfecha 

select @sql= 'create table ['+@varfecha+']
(ID varchar(40),
Cierre varchar(40),
  Seg1 float,
Mora1 float,
Saldo_Tarshop float,
Saldo_FD float,
Seg2 float,
Mora2 float)

bulk insert ['+@varfecha+']
from ''C:\Martin\T\201403\Archivos Recibidos\'+@varfecha+'.txt''
WITH
( 
FIELDTERMINATOR = ''|'',
ROWTERMINATOR = ''|\n'' )'
exec(@sql)

你似乎错过了引号。

同样,如果没有实际的错误消息,很难解决这些问题。