VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 976|回复: 4

bulk insert 的问题,结束符的Ascii为0D 0A

[复制链接]

1

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-3-17 21:00:01 | 显示全部楼层 |阅读模式
如何bulk insert 的ms sql server呢
回复

使用道具 举报

0

主题

30

帖子

25.00

积分

新手上路

Rank: 1

积分
25.00
发表于 2020-7-5 18:00:02 | 显示全部楼层
不明白楼主要问什么
参考一下:
BULK INSERT dbname..tablename
FROM 'd:\a.txt'
WITH (
    FIELDTERMINATOR = ',',   -- 分隔符
    ROWTERMINATOR ='\n'      -- 换行符
)
回复

使用道具 举报

1

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
 楼主| 发表于 2020-7-12 13:00:01 | 显示全部楼层
就是 ROWTERMINATOR ="????"  -- 换行符
这个地方(???)不是换行符,而是在文本里根本看不到这个结束符,但是在ultraEdit的16进制看到这个换行的位置的Ascii为0D 0A
这个文件是由unix操作系统从infomix导出来的,用vi可以看到"$"这样的行结束符,但在windows的记事本里看不到这个行结束符

请大侠发贴呀

决不在乎分数
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 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)是不能当参数传的,只能放到存储过程里面,可惜这样弄还是过不去,希望有高手来把这个处理了吧
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-8-29 16:15:01 | 显示全部楼层
DECLARE @bulk_cmd varchar(1000);
SET @bulk_cmd = 'BULK INSERT CallLog.TelstkTemp01 FROM ''D:\Program\litz\data\历史.txt'' with (FIELDTERMINATOR =''\t'', ROWTERMINATOR = '''+CHAR(10)+''')';
EXEC(@bulk_cmd);


这样就可以了...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表