当前位置: 首页 > 面试题库 >

IDENTITY_INSERT设置为OFF时,SQL无法为表'Table'中的标识列插入显式值[重复]

米丰
2023-03-14
问题内容

这个问题已经在这里有了答案

当IDENTITY_INSERT设置为OFF时,无法在表’table’中为身份列插入显式值
(22个答案)

7年前关闭。

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) 袗小小袨袪孝.');

但是我得到了错误:

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) 袗小小袨袪孝.');

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


问题答案:
SET IDENTITY_INSERT Table_Name ON;
GO

    /* Do your Inserts */

SET IDENTITY_INSERT Table_Name OFF;
GO

笔记

这不是一个好习惯,一点也不建议。您可能最终会得到重复的值,因此,让identity列为您生成值。如果您希望自己插入值,则根本不要使其成为身份列。

如果要在Identity列中显式插入值,以确保永远不会出现重复的值,则可以在明确插入值后重新设置Identity列的值:

DBCC CHECKIDENT ('Table_Name', RESEED, 0); --<-- Reseed value to 0
GO

DBCC CHECKIDENT ('Table_Name', RESEED);    --<-- Reseed value to next available value
GO


 类似资料:
  • 问题内容: 每当我尝试通过表单将数据提交到此数据库时,都会引发此异常:- 例外 当IDENTITY_INSERT设置为OFF时,无法在表’ClientDetails’中为标识列插入显式值。 但是,该表单没有字段,因此数据可以输入身份列(PK),所以我不知道为什么会这样。 目前,我正在使用标准的asp.net mvc提交按钮,但最终将其链接到jquery对话框按钮 ClientNo列(异常所指的所述

  • 问题内容: 是否有人知道这个错误(仅当使用列列表且IDENTITY_INSERT为ON时,才能指定表“ HD_AANVRAAG_FASE”中的身份列的显式值)。 说明:执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪,以获取有关错误及其在代码中起源的更多信息。 异常详细信息:System.Data.SqlClient.SqlException:仅在使用列列表且IDENTITY_INSERT为

  • 问题内容: 当我尝试通过hibernate方式提交到SQL Server时出现JDBC错误 当IDENTITY_INSERT设置为OFF时,无法在表’Report’中为标识列插入显式值 我正在使用由包含以下内容的netbeans生成的映射: 在我看来,它应该正确地进行身份插入。 关于如何解决此问题的任何想法? 编辑: 一些文档链接,供后人, http://www.hibernate.org/hib

  • 问题内容: 我有一个已删除的文件存档数据库,其中存储了已删除文件的ID,我希望管理员能够恢复该文件(以及用于链接文件的相同ID)。我不想从整个表中删除identity_insert,因为增量为1的效果很好。在我的插入存储过程中,我有这样的东西 但是我不断收到同样的错误: 当IDENTITY_INSERT设置为OFF时,无法在表’TBL_Content’中为标识列插入显式值。 有什么帮助吗? 问题答

  • 如何将从上述插入语句填充的标识值()插入到表(另一个表)中 任何人都可以解释一下我如何为更大的记录集(数千条记录)实现它? 我们可以使用循环和?如果是,请解释我们如何做到这一点? 如果我从选择查询插入到#test中,会是什么情况? 插入到#test(b,c)中从…(数千条记录)中选择 我如何捕获标识值并将该值用于另一个(#sample) insert into #sample(e,f) selec

  • 我有一个使用存储过程填充的表。这个存储过程使用从另一个数据库调用属性的视图。 举例来说,它类似于: 视图的定义如下: 并正确插入值,但如果以这种方式使用视图: 显示此消息: 正在检查身份信息:当前身份值“1252” DBCC执行已完成。如果DBCC打印了错误消息,请与系统管理员联系。 Msg 515,第16级,状态2,过程TSP,第16行 无法将值NULL插入表db2的“金额”列中。dbo。表';