簡體   English   中英

為什么我的自動增量在SQL Server 2008中不起作用?

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

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