2013-04-25 56 views
0

我正在使用SQL SERVER 2008这个查询..SQL Server标识相关的错误

SET IDENTITY_INSERT ABC ON 

BULK 
INSERT ABC 
FROM 'F:\test.csv' 
WITH 
(
    FIELDTERMINATOR = ',', 
    ROWTERMINATOR = '\n' 
) 
GO 

,并得到一个错误:

必须为标识列在表中指定

明确的值 'ABC' 或者当IDENTITY_INSERT设置为ON或复制用户插入到NOT FOR REPLICATION标识列时为 。

为 'ABC' 表的结构是:从CSV

ID [int] IDENTITY(1,1) NOT NULL, -- primary key 
aa [varchar](50) NULL, 
bb [varchar](50) NULL, 
cc [datetime] NULL, 
dd [varchar](50) NULL, 
ee [varchar](50) NULL, 
ff [int] NULL, 
gg [varchar](50) NULL, 
ii [int] NULL, 
jj [int] NULL 

示例数据文件

84,0b0dbe1d,192.168.10.221,2012-07-27 16:15:41.503,0b0dbe1d_16-15-18,1.0.0,2,pra,2,NULL 
85,111de4b6,192.168.10.221,2012-07-27 16:27:06.060,111de4b6_16-27-05,1.0.0,8,Diane,5,NULL 
+0

你需要插入到具有标识列的表中时显式指定列名称。 – Maximus 2013-04-25 09:37:25

+0

但在csv文件中那些值在那里..那是我的要求... SET IDENTITY_INSERT ABC ON ..因此,只有我认为...是不是有任何方法来处理这个。 – James 2013-04-25 09:38:25

回答

0

这个错误清楚地说,你需要同时插入到指定的列名。

我不认为我们有一个选项可以在批量插入时指定列名。您可以使用下面的替代方法。

select * into dbo.Stagingtable from ABC where 1=2 
    go 

    BULK 
    INSERT Stagingtable 
    FROM 'F:\test.csv' 
    WITH 
    (
     FIELDTERMINATOR = ',', 
     ROWTERMINATOR = '\n' 
    ) 
    GO 
    SET IDENTITY_INSERT ABC ON 
GO 
    INSERT INto ABC (column1,column2,etc) 
    select * from Stagingtable 
0

Keep Identity Values When Bulk Importing Data (SQL Server)

为了防止SQL Server,而散装 导入数据行插入表中分配的标识值,使用适当的保身份 命令限定。当您指定保持身份限定符时,SQL将使用数据文件中的身份值。这些限定词是 如下:

bcp           | -E    | Switch 
BULK INSERT         | KEEPIDENTITY | Argument 
INSERT ... SELECT * FROM OPENROWSET(BULK...) | KEEPIDENTITY | Table hint 

的例子展示了如何在您的案件,不适用此药水:

BULK 
INSERT ABC 
FROM 'F:\test.csv' 
WITH 
(
    KEEPIDENTITY, 
    FIELDTERMINATOR = ',', 
    ROWTERMINATOR = '\n' 
) 
GO 
+0

如果某个值为NULL,是否会成为问题...因为我收到错误...对于第1行第9列(ii)批量加载数据转换错误(类型不匹配或指定代码页的字符无效)。 – James 2013-04-25 10:00:35

+0

请针对其他问题询问另一个问题。 – 2013-04-25 10:13:15

+0

我仍然得到错误,包括KEEPIDENTITY .. – James 2013-04-25 10:14:33

1

詹姆斯,你得到错误,因为CSV文件中包含9倍的值,但你的表结构包含10列..所以这就是为什么你会得到这个错误.. 如果你设置Identity_Insert ABC关闭 那么你将得到没有错误

+0

其10个cloumn和10个值。 – James 2013-04-25 10:08:01