测试环境
Microsoft SQL Server 2005 - 9.00.1399.06 (X64)   
Oct 14 2005 00:35:21   
Copyright (c) 1988-2005 
Microsoft Corporation  Enterprise Edition (64-bit) on Windows NT 5.2 (Build 3790: Service Pack 2) 目的
使用bcp 导出 DBA.dbo.tba中的数据并导入DBB.dbo.tbb, DBA 和DBB在同一个服务器上代码:
--new version with 'bcp copy'
SET @SQLStr = ' BCP "'
+ ' SELECT * '
+ ' FROM DBA.dbo.tba WITH(NOLOCK) '
+ ' ORDER BY [SeqNo] ASC '
+ '" QUERYOUT "C:\tmpContentTable.dat"   -b100000  -n -t "||" -r"\r\n" -S"' + @sTargSvr + '" -U "'+ @sTargSvrLogin +'" -P "' + @sTargSvrPwd+ '"'EXEC master..xp_cmdshell @SQLStrSET @SQLStr = 'BCP DBB.dbo.tbb IN "C:\tmpContentTable.dat"   -b100000  -n -t "||" -r"\r\n" -S"' + @sTargSvr + '" -U "'+ @sTargSvrLogin +'" -P "' + @sTargSvrPwd+ '"'
EXEC master..xp_cmdshell @SQLStrEXEC master..xp_cmdshell 'del C:\tmpContentTable.dat'
--end of updated module导出顺利,但是导入时候总是出错1. 使用 -b100000  -n -t "||" -r"\r\n" 参数 ,报错
SQLState = 22001, NativeError = 0
Error = [Microsoft][SQL Native Client]String data, right truncation
2.使用 -b100000  -c -t "||" -r"\r\n" 参数 ,报错
SQLState = 22018, NativeError = 0
Error = [Microsoft][SQL Native Client]Invalid character value for cast specification
3.使用 -b100000  -w -t "||" -r"\r\n" 参数 ,报错
SQLState = 22018, NativeError = 0
Error = [Microsoft][SQL Native Client]Invalid character value for cast specification4.使用 -b100000  -n -t "||"  参数 ,报错
SQLState = HY000, NativeError = 0
Error = [Microsoft][SQL Native Client]Unexpected EOF encountered in BCP data-file其它网上相关的解决方法也都试过了,错误大都是上面的提示大家有什么想法,多谢先

解决方案 »

  1.   

    你的数据是"liangck"  长度为7..但你目标表的列类型的长度小于它.
      

  2.   


    源表和目标表完全一样,其实数据库也都是一样的
    只是数据量过大,如果用insert into select所需时间太久,所以想用bcp来加快处理
      

  3.   

    -n -t "||" -r"\r\n"导出使用这些参数.导入也同样使用这些参数.
      

  4.   

    我现在已经全部使用动态string然后拼接,应该没有什么参数不一致的问题
    刚尝试了用format file,好像也不可以
      

  5.   

    做个测试吧.
    CREATE DATABASE MyTest
    GO
    CREATE TABLE tb(id int,val varchar(5))
    INSERT tb VALUES(1,'liang')
    GO!!BCP "SELECT * FROM MyTest.dbo.tb" queryout C:\test.txt -c -t"||" -r"\r\n" -T--手动将C:\test.txt的liang改为liangck--再导入,,看看问题.
    !!BCP MyTest.dbo.tb in C:\test.txt -c -t"||" -r"\r\n" -T
      

  6.   

    ....CREATE DATABASE MyTest
    GO
    CREATE TABLE tb(id int,val varchar(10))
    INSERT tb VALUES(1,'liangck')!!BCP "SELECT * FROM MyTest.dbo.tb" queryout G:\test.txt -n -t"||" -r"\r\n" -T
    CREATE TABLE tb1(id int,val varchar(5))
    !!BCP MyTest.dbo.tb1 in G:\test.txt -n -t"||" -r"\r\n" -T--没问题吗?..
      

  7.   

    发现原因了,多谢大家主要是在运行的时候,第一句结束的时候还需要继续写入文件一段时间,而这时候第二句已经开始读取文件
    这样造成第一句还没有写完文件就已经被第二句的import读取了,所以会出现这些奇怪问题
    --new version with 'bcp copy'
    SET @SQLStr = ' BCP "'
                + ' SELECT * '
                + ' FROM DBA.dbo.tba WITH(NOLOCK) '
                + ' ORDER BY [SeqNo] ASC '
                + '" QUERYOUT "C:\tmpContentTable.dat"   -b100000  -n -t "||" -r"\r\n" -S"' + @sTargSvr + '" -U "'+ @sTargSvrLogin +'" -P "' + @sTargSvrPwd+ '"'EXEC master..xp_cmdshell @SQLStrWAITFOR   DELAY   '00:00:30' SET @SQLStr = 'BCP DBB.dbo.tbb IN "C:\tmpContentTable.dat"   -b100000  -n -t "||" -r"\r\n" -S"' + @sTargSvr + '" -U "'+ @sTargSvrLogin +'" -P "' + @sTargSvrPwd+ '"'
    EXEC master..xp_cmdshell @SQLStrEXEC master..xp_cmdshell 'del C:\tmpContentTable.dat'
    --end of updated module
    中间加上一个delay可以让export的内容顺利写入文件这样就解决了
    谢谢大家