无法为没有主键的标识列插入显式值

时间:2014-04-27 04:03:05

标签: sql sql-server tsql

我有一张桌子:

Ratings
---
PersonId int FKEY
FormId int FKEY
Rating int (NULLABLE)

执行此查询时:

INSERT INTO Ratings (PersonId, FormId)
SELECT p.PersonId, f.FormId
FROM People p, Forms f

我收到此错误:

  

无法在表格中列出标识列的显式值'评级'当IDENTITY_INSERT设置为OFF时。

有一次,我不小心将两个外键列设置为复合主键,我担心可能存在某种形式的数据损坏。从长远来看,我该怎么做才能解决这个问题或修复我的问题?

3 个答案:

答案 0 :(得分:1)

请修改您的评级表格结构。其中一列(PersonId或FormId)被配置为IDENTITY列(序列),这没有任何意义,因为它们都是指向其他表的FK。您应该从此表中的列(即PersonId或FormId)中删除IDENTITY属性。

答案 1 :(得分:0)

此脚本演示了IDENTITY_INSERT的工作原理。请检查 - 没有定义PRIMARY KEY

CREATE TABLE dbo.Tool(ID INT IDENTITY, Name VARCHAR(40)) 
GO

SELECT * FROM dbo.Tool 
GO

SET IDENTITY_INSERT dbo.Tool ON 
GO

INSERT INTO dbo.Tool (ID, Name) VALUES (3, 'Garden shovel') 
GO

SELECT * FROM dbo.Tool 
GO

DROP TABLE dbo.Tool
GO

答案 2 :(得分:0)

尝试设置IDENTITY_INSERT

SET IDENTITY_INSERT  [Table] ON
--Write your Insert  Query
SET IDENTITY_INSERT  [Table] OFF
相关问题