当缺少 {CR} 且 {LF} 出现在固定长度文件的末尾时,BCP 不工作
BCP not working when {CR} is missing & {LF} is present at the end of a fixed length file
SET @query='bcp Staging.DBO.MSP_Tin_Reference_Response_FileImport in '+@TinResponseFilePath+@TinResponseFileName+' -T -c '
EXEC MASTER..xp_cmdshell @query --,1
并抛出以下错误:
NULL
Starting copy...
SQLState = S1000, NativeError = 0
Error = [Microsoft][SQL Server Native Client 10.0]Unexpected EOF encountered in BCP data-file
NULL
0 rows copied.
Network packet size (bytes): 4096
Clock Time (ms.) Total : 1
NULL
感谢您能给我的任何帮助。
默认情况下,-c
选项要求每行在 {CR}{LF}
中终止。但是,您可以使用 -r
选项告诉 BCP 使用不同的行终止符。
我建议您尝试使用选项 -c -r \n -t \t
进行导入。这指定导入将对所有字段使用字符数据类型,但将 {LF}
指定为行终止符,将 TAB 指定为字段分隔符。
另一件事是,最好始终将文件名放在双引号 ("<file name>"
) 之间,否则如果文件名中有空格,BCP 命令将失败。
因此您的命令将如下所示:
SET @query='bcp Staging.DBO.MSP_Tin_Reference_Response_FileImport in "'+@TinResponseFilePath+@TinResponseFileName+'" -T -c -r \n -t \t'
EXEC MASTER..xp_cmdshell @query --,1
更新:看来您仍然遇到问题;现在 BCP 要求 字段 XXX 的文件存储类型。
您可以通过以下方式解决此问题:
- 首先为您的 table 创建格式文件。你只需要这样做一次。
- 在导入命令中指定格式文件。
第一步(以C:\Temp\fi.fmt
为例):
SET @query='BCP Staging.DBO.MSP_Tin_Reference_Response_FileImport format nul -f "C:\Temp\fi.fmt"';
EXEC MASTER..xp_cmdshell @query;
第 2 步。运行 使用 -f
开关导入:
SET @query='bcp Staging.DBO.MSP_Tin_Reference_Response_FileImport in "'+@TinResponseFilePath+@TinResponseFileName+'" -f "C:\Temp\fi.fmt" -T -r \n -t \t'
EXEC MASTER..xp_cmdshell @query
SET @query='bcp Staging.DBO.MSP_Tin_Reference_Response_FileImport in '+@TinResponseFilePath+@TinResponseFileName+' -T -c '
EXEC MASTER..xp_cmdshell @query --,1
并抛出以下错误:
NULL
Starting copy...
SQLState = S1000, NativeError = 0
Error = [Microsoft][SQL Server Native Client 10.0]Unexpected EOF encountered in BCP data-file
NULL
0 rows copied.
Network packet size (bytes): 4096
Clock Time (ms.) Total : 1
NULL
感谢您能给我的任何帮助。
默认情况下,-c
选项要求每行在 {CR}{LF}
中终止。但是,您可以使用 -r
选项告诉 BCP 使用不同的行终止符。
我建议您尝试使用选项 -c -r \n -t \t
进行导入。这指定导入将对所有字段使用字符数据类型,但将 {LF}
指定为行终止符,将 TAB 指定为字段分隔符。
另一件事是,最好始终将文件名放在双引号 ("<file name>"
) 之间,否则如果文件名中有空格,BCP 命令将失败。
因此您的命令将如下所示:
SET @query='bcp Staging.DBO.MSP_Tin_Reference_Response_FileImport in "'+@TinResponseFilePath+@TinResponseFileName+'" -T -c -r \n -t \t'
EXEC MASTER..xp_cmdshell @query --,1
更新:看来您仍然遇到问题;现在 BCP 要求 字段 XXX 的文件存储类型。
您可以通过以下方式解决此问题:
- 首先为您的 table 创建格式文件。你只需要这样做一次。
- 在导入命令中指定格式文件。
第一步(以C:\Temp\fi.fmt
为例):
SET @query='BCP Staging.DBO.MSP_Tin_Reference_Response_FileImport format nul -f "C:\Temp\fi.fmt"';
EXEC MASTER..xp_cmdshell @query;
第 2 步。运行 使用 -f
开关导入:
SET @query='bcp Staging.DBO.MSP_Tin_Reference_Response_FileImport in "'+@TinResponseFilePath+@TinResponseFileName+'" -f "C:\Temp\fi.fmt" -T -r \n -t \t'
EXEC MASTER..xp_cmdshell @query