日期:2014-05-19  浏览次数:20584 次

bulk insert 时如何处理标识列?
从MyTab表导出数据到文件MyTxt.txt,不需要将标识列Sn导出,以后需将MyTxt.txt里的数据导回到MyTab表中,如果将MyTab表中的Sn列删除,导入成功,如果保留Sn列则出错,现错误码:
服务器:   消息   4864,级别   16,状态   1,行   1
第   1   行、第   2   列(BuildingID)发生大容量插入数据转换错误(类型不匹配)。...........
但我现在的MyTab表中一定要保留Sn列,我采用的SQL语句是:
BULK   INSERT   My_bill.dbo.MyTab     FROM   'D:\MyTxt.txt '   WITH   (FIELDTERMINATOR   =   '\t ',ROWTERMINATOR   =   '\n ')
我也在sqlserver中看了bulk   insert,好象错误与KEEPIDENTITY有关?又好象要采用格式文件?请大侠们指点迷津!

------解决方案--------------------
--设定自动增长

SET IDENTITY_INSERT table on 打开自动增长

-要重设种子的起始值
DBCC CHECKIDENT (Table, RESEED, 1000)


------解决方案--------------------
你导出的时候没有导标识列,实际上你的文本跟你的MyTab表已经没有关联了
所以你导回来的时候怎么去判断你文本里每条数据对应那一行,
你的问题是根本就没有关联的列

建议你把文本里面的数据插入到一个临时表插入的时候建一个标识列
同样把你的MyTab表也插入到一个临时表插入的时候建一个标识列

这样你就可以通过两个临时表的标识列建立起文本数据和MyTab表之间的关联
最后插入MyTab表


------解决方案--------------------
Sn是标识列,当然不能导入,你如果要导入的话,要先把标识屏蔽掉