2013-04-25 30 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