首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

关于Bulk insert处置疑惑

2013-08-16 
关于Bulk insert处理疑惑最近在用Bulk insert,有3个疑惑BULK INSERT Northwind.dbo.[Order Details]FROM

关于Bulk insert处理疑惑
最近在用Bulk insert,有3个疑惑
BULK INSERT Northwind.dbo.[Order Details]   FROM 'f:/orders/lineitem.txt'    
WITH (  
     FIELDTERMINATOR = '|',           
     ROWTERMINATOR = '|/n' ,
     FIRSTROW=4        
)

lineitem.txt
里的数据类型是这样的

/n
   sample test /n
/n
2011/11/14|222|2222|
333|222|2222|/n
2011/11/15|222|2222|
444|222|2222|/n

1:我想从lineitem.txt的第四行开始读取数据,但实际操作过程中并没有将数据插到DB里,也没有报错。这是什么原因
2:我想用begin try和begin catch 来捕捉insert产生的异常,但实际情况是当出错时并没有跑到begin catch。而是把正确的数据插入,错误的数据没被插入
3:txt里的日期是2011/11/14 这种date型,但是DB确是datetime型,这个怎么处理啊
[解决办法]
1、BULK INSERT Northwind.dbo.[Order Details]   FROM 'f:/orders/lineitem.txt'    
WITH (  
     FIELDTERMINATOR = '
[解决办法]
',           
     ROWTERMINATOR = '
[解决办法]
/n' ,
     FIRSTROW=4        
)把红字部分的/换成\
2、转换日期的问题,建议你插入一个临时表,然后用我文章里面的最后一部分的方法转换后再插入目标表:
http://blog.csdn.net/dba_huangzj/article/details/7657979
3、try catch怎么写要看你的写法了,而且有些错误级别如果非常低,说不定捕获不了,不过4年没编程,不是很记得了。
[解决办法]
1、lz设定的firstrow,是按照ROWTERMINATOR = '
[解决办法]
/n'  的分隔得到的第4行开始,lz这个数据无法分隔出第四行哦。 执行中没有语法错误,只是没有得到数据而已,所以没有报错。 

2、同样道理,插入的数据产生的问题,并非是应用错误。 所以catch不到。只能进行逻辑判断。 

3、lz这个涉及表与数据的匹配问题,这个就看lz想怎么用了,一般都是按照表设计为准。


[解决办法]
1:我想从lineitem.txt的第四行开始读取数据,但实际操作过程中并没有将数据插到DB里,也没有报错。这是什么原因


--> 1. txt文件中,数据行1,3跟数据行2,4的行终止符不一致.
    2. 换行符应该是'\n',非'
[解决办法]
/n'.

2:我想用begin try和begin catch 来捕捉insert产生的异常,但实际情况是当出错时并没有跑到begin catch。而是把正确的数据插入,错误的数据没被插入
--> 加maxerrors参数: maxerrors=0
    maxerrors: 指定允许在数据中出现的最大语法错误数,超过该数量后将取消大容量导入操作.大容量导入操作无法导入的每一行都将被忽略并且计为一个错误.如果未指定 max_errors,则默认值为10.
    参考 http://technet.microsoft.com/zh-cn/library/ms188365(v=sql.105).aspx

3:txt里的日期是2011/11/14 这种date型,但是DB确是datetime型,这个怎么处理啊
--> date型可以赋值给datetime型,会自动补上时间 00:00:00.000

热点排行