2017-07-26 74 views
0

我試圖插入值的表,收到此錯誤信息,插入,而不指定行ID

Cannot insert a value NULL into column "RowID". 

我必須在表中查找人工輸入的每一次最後RowID價值,我做了一個插入像下面的插入?

insert into table1 (RowID, Name, Gender) values (801, John, Male) 

是否有插入喜歡的方式:

insert into table1 (RowID, Name, Gender) values (AutoInputRowID, John, Male) 
+0

RowID列的數據類型是什麼?如果你可以嘗試IDENTITY屬性,這可以變成自動的。請參閱:https://docs.microsoft.com/en-us/sql/t-sql/statements/create-table-transact-sql-identity-property – kamleshrao

回答

2

假設RowID列是自動遞增列,你可以簡單地從插入忽略它,以自動獲得SQL服務器分配值到它:

insert into table1 (Name, Gender) 
values ('John', 'Male') 

如果RowID不是一個自動遞增列,你需要這樣的功能,那麼你可能有一些工作做,q.v.在這裏:

SQL Server add auto increment primary key to existing table

0

派生它,你要插入,就像這樣:

INSERT INTO table1 (RowID, Name, Gender) 
SELECT MAX(RowID) + 1, 'John', 'Male' 
FROM table1 

有用的,如果你沒有,不想要的,和/或無法使用identity。只要考慮性能影響(如果有任何)。

如果一次插入多條記錄,您可能需要使用從上面的MAX結果轉移的ROW_NUMBER()

0

你有2種選擇,使其: 1設置列ROWID的身份(但你可以做到這一點只有當你的表是空的) 2 - 創建,讓您的最大值爲行ID的功能表:

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
CREATE FUNCTION dbo.getMaxValue() 
RETURNS int 
AS 
BEGIN 

DECLARE @valRet int 
SELECT @valRet=MAX(RowID) + 1 
FROM table1 ; 

RETURN @valRet 

END 
GO 

和之後調用該函數在INSERT命令:

insert into table1 (RowID, Name, Gender) values (dbo.getMaxValue(), John, Male) 
1

只是我的兩分錢:

您實際上可以將現有的列轉換爲標識。只要被更改的列是唯一的數字,它就會自動從最大值+1開始遞增。你也可以選擇重新設定值,所以如果你的最大值是例如100.你可以選擇從200開始種子,以便你的下一個插入會給你201.

這可以在SQL Server Management Studio中完成。在設計模式下編輯有問題的表格。選擇您想要修改的列。有一個名爲「Identity Specification」的屬性,將其展開並更改值「Is Identity」=「Yes」並保存該表。如果您想重新設定種子(從特定數字開始),請在「身份種子」屬性中設置此值。

查看Adding an identity to an existing column下的部分答案獲取更多詳情。

+0

請問。 – KtX2SkD

+1

這可以在SQL Server Management Studio中完成。在設計模式下編輯有問題的表格。選擇您想要修改的列。有一個名爲「Identity Specification」的屬性,將其展開並更改值「Is Identity」=「Yes」並保存該表。如果您想重新設定種子(從特定數字開始),請在「身份種子」屬性中設置此值。詳情請看這裏。 [將標識添加到現有列](https://stackoverflow.com/questions/1049210/adding-an-identity-to-an-existing-column) – SQLAndOtherStuffGuy