尝试运行insert语句时出现以下错误:
Msg 544, Level 16, State 1, Line 3
Cannot insert explicit value for identity column in table 'IV00101' when IDENTITY_INSERT is set to OFF.
是否有一种简单的方法可以找到我尝试插入的标识列导致此错误?
问题是我的insert语句有84个值我插入。
我正在使用Microsoft SQL 2008
答案 0 :(得分:5)
SELECT name
FROM sys.columns
WHERE [object_id] = OBJECT_ID('dbo.IV00101')
AND is_identity = 1;
答案 1 :(得分:1)
你的问题有点不清楚,但我会抓住它:
听起来像标识列是自动递增的,并且您正在尝试插入该值。
您可以使用此查询获取所有表的标识列:
select TABLE_NAME + '.' + COLUMN_NAME, TABLE_NAME
from INFORMATION_SCHEMA.COLUMNS
where TABLE_SCHEMA = 'dbo'
and COLUMNPROPERTY(object_id(TABLE_NAME), COLUMN_NAME, 'IsIdentity') = 1
order by TABLE_NAME
答案 2 :(得分:1)
您可以查询系统对象信息以找出哪些列是标识
SELECT c.name
FROM
sys.columns c
JOIN sys.objects o ON c.object_id = o.object_id
WHERE
o.name = 'TABLE_NAME' -- replace with table nae
AND c.is_identity = 1
答案 3 :(得分:1)
select name
from sys.identity_columns
where [object_id] = object_id('your_table_here')
答案 4 :(得分:0)
如果您的表具有主键,则标识列可能是主键,如James Johnson's answer中已提到的那样。
如果不是,您可以让SQL Server Management Studio为表创建完整的CREATE TABLE
脚本,并在其中搜索单词IDENTITY
。
在我看来,这是实现这一目标的最简单,最快捷的方法(足以实现一次性行动)。
编辑:
@Aaron Bertrand:所以,我说的是这个:
是的,在SSMS中找到主键比找到标识列更容易
(老实说:我不知道有什么更好的方法可以找到使用SSMS的标识栏,这就是为什么我建议我上面描述的方式)
- >如果找到主键也意味着在95%的情况下找到身份,为什么不首先尝试使用简单/快速方式(找到主键)?
如果主键不是标识列,您仍然可以使用答案中的“正确”方式搜索标识列(这无疑是正确的方法,但不像在UI中查找主键那么容易)
答案 5 :(得分:0)
您正试图覆盖默认身份,为此您需要在查询顶部添加此身份
SET IDENTITY_INSERT [ database_name . [ schema_name ] . ] table { ON | OFF }