我有两张桌子 -
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
和触发器的内容,但我不知道从哪里开始。
任何帮助都非常感激。
谢谢
答案 0 :(得分:0)
您假设无论何时添加类别,其CategoryID都应出现在Products CategoryID列中,这是错误的。
实际添加具有该类别的产品时,它只会出现在Products表的CategoryID列中。
您可以创建一个存储过程来为您添加产品和类别,它会检查是否存在类别并为该类别抓取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