2011-09-08 79 views
3

當試圖運行一個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.

有沒有一種簡單的方法來找到我試圖插入什麼標識列是造成這個錯誤?

問題是我的插入語句有84個值插入。

我使用的是Microsoft SQL 2008

+0

你能告訴我們你的insert語句? –

回答

5
SELECT name 
    FROM sys.columns 
    WHERE [object_id] = OBJECT_ID('dbo.IV00101') 
    AND is_identity = 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 
0

如果你的表中有一個主鍵,標識列可能是主鍵,在James Johnson's answer已經提到。

如果不是,您可以讓SQL Server Management Studio爲該表創建完整的CREATE TABLE腳本,並在其中搜索單詞IDENTITY

在我看來,這是最簡單,最快捷的方式(對於一次性操作而言足夠)。


編輯:

@Aaron貝特朗:
我知道主鍵和身份是兩個不同的概念。
但是,老實說:在您看到過的所有帶有標識列的表中,有多少人看到標識列的位置是而不是的主鍵?
你是在說你自己這是常見的做法。

所以,我在說的是:
是的,找到SSMS中的主鍵比IMO更容易找到標識列。
(老實說:我不知道使用SSMS找到身份列的更好方法,這就是爲什麼我提出了我上面描述的方式)
- >如果找到主鍵還意味着找到95所有情況的百分比,爲什麼不嘗試首先使用easy/fast方式(找到主鍵)?
如果主鍵不是標識列,仍然可以使用答案中的「正確」方式搜索標識列(這毫無疑問是正確的方式,但不像找到UI)。

+1

爲什麼標識列「可能」是主鍵?與查找標識列相比,使用UI查找主鍵更容易些?雖然身份和主鍵被分配到同一列可能很常見,但請不要使任何他們必然相關的神話永久存在。他們是兩個非常不同的概念。 –

+0

因爲使用目錄視圖有一種簡單的方法可以找到'IDENTITY *列* *,而不僅僅是*可能*使用UI(如果通過設計打開表格設計器,則在下部窗格中可以使用Identity Specification上下文菜單)。有很多帶'IDENTITY'列的表甚至沒有主鍵,有很多都有但不在同一列上,而且很多都沒有。我只是認爲告訴用戶身份專欄可能是主鍵是誤導性的。主鍵也可能聚集在一起,但不一定。 –

+0

PS這個問題是在2006年提出的,建議添加這個屬性,但他們把它擊落。 http://connect.microsoft.com/SQLServer/feedback/details/124859/add-identity-to-column-description-in-sql-server-management-studio其中的解決方法建議右鍵單擊每列並選擇屬性,但這太麻煩了。右鍵單擊表格並選擇「設計」,它位於下方的窗格中。發現表格設計師*對所有事情都有好處...... –

0

您試圖覆蓋默認的身份,這樣做,你需要在查詢的頂部

SET IDENTITY_INSERT [ database_name . [ schema_name ] . ] table { ON | OFF } 
+2

不一定是個好主意。 – JNK

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 
1
select name 
from sys.identity_columns 
where [object_id] = object_id('your_table_here')