2017-10-11 124 views
0

我試圖用下面的代碼構建表 - 我創建表時沒有錯誤,我可以看到結構並且它顯示IDENTITY_INSERT設置爲ON插入時生成標識插入錯誤(不在代碼中)

CREATE TABLE lt_percent_cs 
(
    id_key INT IDENTITY PRIMARY KEY, 
    customer_no INT , 
    season INT, 
    percentage DECIMAL, 

    created_by VARCHAR(15) NULL, 
    create_dt DATETIME NULL, 
    last_updated_by VARCHAR(15) NULL, 
    last_update_dt DATETIME NULL, 
    create_loc VARCHAR(16) NULL 
) ON [primary] 

SET ANSI_PADDING OFF 
GO 

ALTER TABLE [dbo].lt_percent_cs 
    ADD CONSTRAINT [lt_percent_created_by] 
     DEFAULT (user_name()) FOR [created_by] 
GO 

ALTER TABLE [dbo].lt_percent_cs 
    ADD CONSTRAINT [lt_percent_create_dt] 
     DEFAULT (getdate()) FOR [create_dt] 
GO 

ALTER TABLE [dbo].lt_percent_cs 
    ADD CONSTRAINT [lt_percent_create_loc] 
     DEFAULT [dbo].fs_location() FOR [create_loc] 
GO 

SET IDENTITY_INSERT lt_percent_cs ON 

當我嘗試插入數據(通過應用程序而不是通過代碼)時,出現以下錯誤。

Last Error: Database update failed:
dataobject=

sqlca.sqlerrtext=SQLSTATE = 42000
Microsoft OLE DB Provider for SQL Server
Cannot insert explicit value for identity column in table 'lt_percent_cs' when IDENTITY_INSERT is set to OFF.

No changes made to database.

INSERT INTO lt_percent_cs (id_key, customer_no, season, percentage)
VALUES (54891, 80055514, 2017, 50)

sqlca.sqldbcode=544

sqlsyntax:
INSERT INTO lt_percent_cs (id_key, customer_no, season, percentage) VALUES (54891, 80055514, 2017, 50)

row:1 [nvo_ds_database.uf_update.34 (544)]

當我運行在SQL Server Management Studio中的腳本,我要補充,它的工作原理沒有問題,也不會產生錯誤。

INSERT INTO lt_percent_cs (id_key, customer_no, season, percentage) 
VALUES (54891, 80055514, 2017, 50) 

有什麼想法?從Insert語句,因爲id_key是身份

回答

0

刪除id_key播種

INSERT INTO lt_percent_cs (customer_no, season, percentage) VALUES (80055514, 2017, 50) 

否則申報id_key as integer Primary Key 然後插入應該工作

INSERT INTO lt_percent_cs (id_key, customer_no, season, percentage) VALUES (54891, 80055514, 2017, 50) 

既然你想批量插入數據,並保持身份,我可以建議ALTER id_key整數主鍵,然後批量插入然後改變字段回到身份到ON ...前進你不需要插入id_key

+0

奇怪的是,插入按原樣工作 - 但應用程序的前端打破了,但您確實給了我一個有趣的想法。 – Elizabeth

+0

我寫的腳本會發生什麼 - 使用大量的數據,列是一個標識,它只是將數據導入到表中,併爲每行創建一個新的標識。但是,應用程序的前端與其構建的方式是,它調用自己的過程來創建基於自己的規則的ID值,我不能使用身份(這是愚蠢的) - 所以我現在必須寫一個遊標使用系統創建所有ID值的過程。 – Elizabeth

+0

我明白你在做什麼......你正在研究什麼樣的應用程序? – maSTAShuFu

0

如果你想在應用程序中插入一個明確的Id,你必須設置Identity_insert並插入一個事務中!我不知道,你正在使用哪個應用程序,但是這個規則是普遍的。