[英]Why isn't my Auto Increment working in SQL Server 2008?
這是我的表創建:
create table Movie
(
MovieID int NOT NULL IDENTITY (1,1) PRIMARY KEY,
MovieName varchar(40) NOT NULL UNIQUE,
CurrentStock int NOT NULL,
GenreID int NOT NULL,
RatingID int NOT NULL,
Max_Inventory int NOT NULL,
Platforms char(5) NOT NULL,
Discontinued bit,
DiscontinuedDate Date
);
create table Inventory
(
InventoryID int NOT NULL IDENTITY (1,1) PRIMARY KEY,
MovieID int Not NULL,
CurrentStock int NOT NULL,
Max_Inventory int NOT NULL
);
存儲過程:
ALTER PROCEDURE [dbo].[InsInventory]
(@CurrentStock int,
@ChangeStock int)
as
begin
insert into Inventory(Max_Inventory, CurrentStock)
Values (@ChangeStock, @CurrentStock)
select SCOPE_IDENTITY();
END
ALTER PROCEDURE [dbo].[InsMovie]
(@GenreID int,
@RatingID int,
@Platform varchar(5),
@MovieName varchar(40)
)
AS
BEGIN
Insert into Movie (RatingID, MovieName, Platforms, GenreID)
Values (@RatingID, @MovieName, @Platform, @GenreID)
select SCOPE_IDENTITY();
SET NOCOUNT ON;
END
外鍵:
ALTER Table Inventory
ADD CONSTRAINT fk_Inventory_Movie
FOREIGN KEY (MovieID) REFERENCES Movie(MovieID)
ALTER TABLE Movie
ADD CONSTRAINT fk_Movie_RatingLookUp
FOREIGN KEY (RatingID) REFERENCES RatingLookUp(RatingID)
ALTER TABLE Movie
ADD CONSTRAINT fk_Movie_GenreLookUp
FOREIGN KEY (GenreID) REFERENCES GenreLookUp (GenreID)
當我運行我的代碼時,我不斷在Visual Studio中收到錯誤
MovieID不能為空
但它應該是我插入一行。 我還確保手動檢查SQL Server是否設置了IsIdentity
。 所以請幫助一個困惑的程序員。
您不應該將NULL
作為主鍵插入以使其生成值,您應該根本不插入該值,方法是不在要插入的字段中列出它。 作為樣本;
INSERT INTO Movie (moviename, currentstock, genreid, ratingid, max_inventory, platforms)
VALUES ('name1', 1, 1, 1, 1, '1');
下面的陳述是你的問題。 你的表def顯示MovieID不為空。 但在下面的陳述中你沒有提供。
insert into Inventory(Max_Inventory, CurrentStock)
Values (@ChangeStock, @CurrentStock)
這是你需要做的...首先你需要檢索將從執行InsMovie sproc返回的Movie id。 比你需要使用那個Movie Id作為InsInvetory sproc調用的參數。
根據你的表格def電影ID是必需的。 同樣對於Movie表,你錯過了我添加的兩個列值,這些值也是必需的。
請參閱打擊更新的存儲過程。
ALTER PROCEDURE [dbo].[InsInventory]
(
@CurrentStock int,
@ChangeStock int,
@MovieID int
)
as
begin
insert into Inventory(MovieID, Max_Inventory,CurrentStock)
Values (@MovieID, @ChangeStock, @CurrentStock)
select SCOPE_IDENTITY();
END
ALTER PROCEDURE [dbo].[InsMovie]
(
@GenreID int,
@RatingID int,
@Platform varchar(5),
@MovieName varchar(40),
@CurrentStock int,
@max_inventory int
)
AS
BEGIN
Insert into Movie (CurrentStock, max_inventory, RatingID, MovieName, Platforms,GenreID)
Values(@CurrentStock, @max_inventory, @RatingID,@MovieName, @Platform, @GenreID)
select SCOPE_IDENTITY();
SET NOCOUNT ON;
END
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.