bulk insert 的问题,结束符的Ascii为0D 0A 如何bulk insert 的ms sql server呢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不明白楼主要问什么参考一下:BULK INSERT dbname..tablename FROM 'd:\a.txt' WITH ( FIELDTERMINATOR = ',', -- 分隔符 ROWTERMINATOR ='\n' -- 换行符) 就是 ROWTERMINATOR ="????" -- 换行符这个地方(???)不是换行符,而是在文本里根本看不到这个结束符,但是在ultraEdit的16进制看到这个换行的位置的Ascii为0D 0A这个文件是由unix操作系统从infomix导出来的,用vi可以看到"$"这样的行结束符,但在windows的记事本里看不到这个行结束符请大侠发贴呀决不在乎分数 今天也遇到这种问题,为了以后有人可以查到所以回复到这里。如果数据从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 ASDECLARE @lf CHAR(1)DECLARE @cmd CHAR(255)SET @RowTerm = CHAR(10)SET @cmd = 'bulk insert MyDB.dbo.MyTB FROM ''C:\20070705.txt'' WITH(FIELDTERMINATOR = ''|'',ROWTERMINATOR ='''+ @RowTerm +''')';exec @cmdGO那个CHAR(10)是不能当参数传的,只能放到存储过程里面,可惜这样弄还是过不去,希望有高手来把这个处理了吧 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);这样就可以了... 关于外键的问题 求一SQL语句,请大家帮帮助看看! 关于字段更新的问题!!! 请问如何在SQL中比较两个时间相等? 简单的T-SQL问题难倒一片。。。 帮我看下这个PHP的问题 这句sql哪儿有错? SQL Server 2000中如何将一个字段设置为自动编号?(在线等待) There is a question about which is the 1st step 急用:如何增加空格? SQL Server 2005 Express版無法還原 有现成的表结构,求一公交换乘的算法,倾囊求助!
参考一下:
BULK INSERT dbname..tablename
FROM 'd:\a.txt'
WITH (
FIELDTERMINATOR = ',', -- 分隔符
ROWTERMINATOR ='\n' -- 换行符
)
这个地方(???)不是换行符,而是在文本里根本看不到这个结束符,但是在ultraEdit的16进制看到这个换行的位置的Ascii为0D 0A
这个文件是由unix操作系统从infomix导出来的,用vi可以看到"$"这样的行结束符,但在windows的记事本里看不到这个行结束符请大侠发贴呀决不在乎分数
如果数据从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:\20070705.txt'' WITH(FIELDTERMINATOR = ''|'',ROWTERMINATOR ='''+ @RowTerm +''')';
exec @cmd
GO
那个CHAR(10)是不能当参数传的,只能放到存储过程里面,可惜这样弄还是过不去,希望有高手来把这个处理了吧
SET @bulk_cmd = 'BULK INSERT CallLog.TelstkTemp01 FROM ''D:\Program\litz\data\历史.txt'' with (FIELDTERMINATOR =''\t'', ROWTERMINATOR = '''+CHAR(10)+''')';
EXEC(@bulk_cmd);
这样就可以了...