[英]Scope_Identity linking 2 tables
我有2张桌子-
create table Category
(
CategoryId int identity (1,1) not null,
Name varchar (40) not null,
constraint PK_Category primary key (CategoryId)
)
GO
create table Product
(
ProductId int identity (1,1) not null,
CategoryId int not null,
Name varchar(40) not null,
constraint PK_Product primary key (ProductId),
constraint FK_Product_Category foreign key (CategoryId) references Category (CategoryId)
)
GO
每当我试图在SQL做的是CategoryId
在输入Category
将出现在表CategoryId
中的Product
表,你可以看到它是在国外关键Product
表。
我已经阅读了scope_identity
和触发器,但是我不确定从哪里开始。
任何帮助,不胜感激。
谢谢
您每当添加类别时,其类别ID应该出现在“产品类别ID”列中的假设都是错误的。
当您实际添加具有该类别的产品时,它只会出现在“产品”表的“类别ID”列中。
您可以创建一个存储过程来为您添加产品和类别,该过程将检查是否存在一个类别并获取该类别的categoryId,如果某个类别不存在,则会为您添加。
就像是 ....
CREATE PROCEDURE Insert_Product
@CategoryName VarChar(40)
,@ProductName VarChar(40)
,@ProductID Int OUTPUT
AS
BEGIN
SET NOCOUNT ON;
DECLARE @CategoryID INT;
SELECT @CategoryID = CategoryId FROM Category WHERE Name = @CategoryName
IF (@CategoryID IS NULL)
BEGIN
INSERT INTO Category(Name)
VALUES (@CategoryName)
SET @CategoryID = SCOPE_IDENTITY();
END
IF EXISTS(SELECT 1 FROM Product
WHERE CategoryId = @CategoryId AND Name = @ProductName)
BEGIN
RAISERROR('Product already exists' ,16,1)
SET @ProductID = 0;
RETURN;
END
ELSE
BEGIN
INSERT INTO Product (CategoryId , Name)
VALUES (@CategoryID , @ProductName)
SET @ProductID = SCOPE_IDENTITY();
END
END
DECLARE @ProductID INT;
EXEC Insert_Product @CategoryName = 'Dairy'
,@CategoryName = 'Milk'
,@ProductID = @ProductID OUTPUT
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.