[英]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.