簡體   English   中英

在表中查找標識列

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM