[英]Finding identity column in a Table
尝试运行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.
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.
有没有一种简单的方法来查找我尝试插入的标识列导致此错误?
问题是我的插入语句有84个值我插入。
我正在使用Microsoft SQL 2008
SELECT name
FROM sys.columns
WHERE [object_id] = OBJECT_ID('dbo.IV00101')
AND is_identity = 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
您可以查询系统对象信息以找出哪些列是标识
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
select name
from sys.identity_columns
where [object_id] = object_id('your_table_here')
如果您的表具有主键,则标识列可能是主键,正如James Johnson的回答中所述 。
如果不是,您可以让SQL Server Management Studio为表创建完整的CREATE TABLE
脚本,并在其中搜索单词IDENTITY
。
在我看来,这是实现这一目标的最简单,最快捷的方式(足以实现一次性行动)。
编辑:
@Aaron Bertrand:
我知道主键和身份是两个不同的概念。
但是,老实说:在您看过的所有带有标识列的表中,您看到有多少标识列不是主键?
你是在说自己这是常见的做法。
所以,我所说的是:
是的,在SSMS中找到主键比找到标识列更容易。
(老实说:我不知道有什么更好的方法可以找到使用SSMS的标识栏,这就是为什么我建议我上面描述的方式)
- >如果找到主键也意味着在95%的情况下找到身份,为什么不首先尝试使用简单/快速方式(找到主键)?
如果主键不是标识列,您仍然可以使用答案中的“正确”方式搜索标识列(这无疑是正确的方法,但不像在UI中查找主键那么容易) 。
您正尝试覆盖默认标识,为此,您需要在查询顶部添加此标识
SET IDENTITY_INSERT [ database_name . [ schema_name ] . ] table { ON | OFF }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.