2017-10-11 7 views
0

次のコードでテーブルを作成しようとしています - テーブルを作成するときにエラーが発生せず、 ON(コードではなく)挿入時にIDインサートエラーが生成されています

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) 

答えて

0

はid_key以来、挿入ステートメントからid_keyを削除するアイデンティティはそれ以外の場合は[挿入はあなたが一括挿入データをたいので

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

を仕事と私はALTERを提案することができますアイデンティティを維持する必要がありid_key as integer Primary Key を宣言

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

を播種されますid_keyを整数型の主キーに変更した後、一括挿入してからIDをONに戻します...進むと、id_keyを挿入する必要はありません

+0

奇妙なのは、インサートがそのまま動作するということですが、アプリケーションのフロントエンドが壊れてしまいますが、あなたは私に興味深い考えを与えました。 – Elizabeth

+0

私が書いたスクリプトは何ですか?データをテーブルにインポートしたIDである大量のデータを取得し、各行に対して新しいIDを作成しました。しかし、アプリケーションのフロントエンドは、それ自身のプロシージャを呼び出して独自のルールに基づいてID値を作成し、アイデンティティ(愚かです)を使用することはできません - 私は今カーソルを書く必要がありますすべてのID値を作成するためにシステムが行う手順を使用します。 – Elizabeth

+0

あなたは何をしようとしているのか見ています...あなたはどんなアプリケーションを使っていますか? – maSTAShuFu

0

アプリケーションに明示的なIDを挿入する場合は、Identity_insertをオンにして1つのトランザクションに挿入する必要があります。あなたが使っているアプリケーションはわかりませんが、このルールは普遍的です。

関連する問題