当IDENTITY_INSERT设置为OFF时,无法在表'Table'中为identity列插入显式值

7 sql sql-server sql-server-2008

sqlfiddle上的结构表和结果查询

我想使用查询:

INSERT INTO Price (id_price, id_firm, id_city, name) 
        VALUES 
        ('12002', '1429', '73041', '?????? (??????) ????????? ?/? 25?'),
        ('12003', '1429', '73041', '?????? ???????????? ?????? (????????????) ??????.'),
        ('12004', '1429', '73041', '?????? ?????????????? ????????? (?????????)'),
        ('12005', '1429', '73041', '?????? ?????????????? ?????????? ?/? 25?'),
        ('12006', '1429', '73041', '?????? ???????????? ??? ????'),
        ('12007', '1429', '73041', '?????? ??????????-???????????? ??????????-????????????? ?????-???? ?? ???? ??? ?/? 4?'),
        ('12008', '1429', '73041', '?????? ???????????? ??? ????'),
        ('12009', '1429', '73041', '?????? ???????????? ??? ????'),
        ('120010', '1429', '73041', '???????? ?/????? ????????? ??????? (CUMMINS) ??????.');
Run Code Online (Sandbox Code Playgroud)

但我得到错误:

Cannot insert explicit value for identity column in table 'Price' when IDENTITY_INSERT is set to OFF.:
    INSERT INTO Price (id_price, id_firm, id_city, name) 
    VALUES 
    ('12002', '1429', '73041', '?????? (??????) ????????? ?/? 25?'),
    ('12003', '1429', '73041', '?????? ???????????? ?????? (????????????) ??????.'),
    ('12004', '1429', '73041', '?????? ?????????????? ????????? (?????????)'),
    ('12005', '1429', '73041', '?????? ?????????????? ?????????? ?/? 25?'),
    ('12006', '1429', '73041', '?????? ???????????? ??? ????'),
    ('12007', '1429', '73041', '?????? ??????????-???????????? ??????????-????????????? ?????-???? ?? ???? ??? ?/? 4?'),
    ('12008', '1429', '73041', '?????? ???????????? ??? ????'),
    ('12009', '1429', '73041', '?????? ???????????? ??? ????'),
    ('120010', '1429', '73041', '???????? ?/????? ????????? ??????? (CUMMINS) ??????.');
Run Code Online (Sandbox Code Playgroud)

请告诉我为什么我会收到错误以及如何正确插入数据?

M.A*_*Ali 23

SET IDENTITY_INSERT Table_Name ON;
GO

    /* Do your Inserts */

SET IDENTITY_INSERT Table_Name OFF;
GO
Run Code Online (Sandbox Code Playgroud)

注意

这不是一个好习惯,根本没有建议.您最终可能会有重复值,因此请让标识列为您生成值.如果您希望能够自己插入值,请不要将其设置为标识列.

  • 我不完全同意你的说明.有时这样做很方便,例如在设置应用程序初始数据的ref数据脚本中(例如,首次安装时).想象一下,你的应用程序可以通过前端添加用户(所以你想要一个标识列),但是你想从(比方说)一个管理员用户开始,所以你有一个初始脚本来设置它.您可能需要稍后在脚本中将此用户的ID用作另一个表中的外键,因此您需要明确指定它. (2认同)