BCP - 导入到具有IDENTITY列的表时,转换规范的字符值无效

时间:2018-01-10 22:22:01

标签: sql-server sql-server-2008 bcp

我正在尝试将文件从UNIX加载到SQL Server。当我运行BCP时收到以下错误,但是当我将数据类型更改为Char时,我能够加载相同的文件。

使用的命令:

- bcp [SQLAAA].[APP_XXX].[ACTIVITY_V1] in /home/XXX_ACTIVITY.txt -c -S xddb001 -e /home/ERRORS.log -t "|" -r "\n" -U test12 -P test12

源文件:

222|2017-12-27|Y|ABC|2017-12-27|ABC|2017-12-27
255|2018-01-04|N|ABC|2018-01-04|ABC|2018-01-04

错误讯息:

  

@ Row 1,第7列:强制转换规范@

的字符值无效

定义表:

CREATE TABLE [APP_XX].[ACTIVITY]
(
[C1] [varchar](10) NOT NULL,
[C2_DATE] [date] NOT NULL,
[c3] [varchar](1) NULL,
[C4_NM] [varchar](10) NULL,
[C5_DTM] [date] NULL,
[C6_NM] [varchar](10) NULL,
[C7_DTM] [date] NULL,
[ROW_ID] [bigint] IDENTITY(1,1) NOT NULL
) ON [PRIMARY]

您能否告诉我可以进行哪些修改?

1 个答案:

答案 0 :(得分:2)

导入带有IDENTITY列的表时,如果没有为导入文件中的IDENTITY列提供值,则需要在格式文件中指定导入时将跳过IDENTITY列。

这种工作方式在Microsoft documentation on BCP, flag -E

中明确提到
  

如果数据文件不包含表或视图中标识列的值,请使用格式文件指定在导入数据时应跳过表或视图中的标识列; SQL Server自动为列分配唯一值。[...]

您需要做什么:

  1. 首先create a format file using BCP。例如。对于非XML格式的文件,该命令看起来像BCP table_or_view format nul -f format_file_name
  2. 指定跳过格式文件
  3. 中的IDENTITY列
  4. 使用BCP IN
  5. #Read File with open('sample.txt', 'r') as f: lines = f.readlines() #Capture 'interfaces' interfaces = [i for i in lines if i.strip().startswith('inter')] #Write it to a file with open('output.txt', 'w') as f: f.writelines(interfaces) 命令中创建的格式文件