|
发表于 2020-8-24 20:45:01
|
显示全部楼层
今天也遇到这种问题,为了以后有人可以查到所以回复到这里。
如果数据从Informix(我的数据就是)来的文本文件,里面的换行符是/n,但用Bulk Insert时/n还是被当作了/r/n来看待,所以直接用ROWTERMINATOR = '/n'是不成的,那么就可以间接的使用,换行符的编码是char(10),这样,
1、在程序中可以改为(我用的delphi,其他也差不多):'Bulk Inser ... ROWTERMINATOR = ''' + char(10) + ''''。
2、另外在网上查的也有人用了fmt模版,这样也可以,但是这样做不如直接去bcp了。
3、最后我还有个问题,想把这个改成存储过程,这样做的话就省不少事,但是没有成功,希望有高手能够看看,我大概思路如下:
CREATE PROCEDURE BulkInsert AS
DECLARE @lf CHAR(1)
DECLARE @cmd CHAR(255)
SET @RowTerm = CHAR(10)
SET @cmd = 'bulk insert MyDB.dbo.MyTB FROM ''C:\20170705.txt'' WITH(FIELDTERMINATOR = ''|'',ROWTERMINATOR ='''+ @RowTerm +''')';
exec @cmd
GO
那个CHAR(10)是不能当参数传的,只能放到存储过程里面,可惜这样弄还是过不去,希望有高手来把这个处理了吧 |
|