Sql 范围\标识链接2个表
我有两张桌子-Sql 范围\标识链接2个表,sql,sql-server,Sql,Sql Server,我有两张桌子- 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, Ca
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中尝试做的是,每当在Category表中输入CategoryId时,它就会出现在Product表的CategoryId中,正如您可以看到的,它是Product表中的外键
我已经读过关于scope_标识和触发器的内容,但是我不确定从哪里开始
非常感谢您的帮助
谢谢您认为无论何时添加类别,其CategoryID都应该出现在Products CategoryID列中的假设是错误的 只有当您实际添加具有该类别的产品时,它才会出现在Products表的CategoryID列中 您可以创建一个存储过程来为您添加产品和类别,该过程检查是否存在类别并获取该类别的categoryId,如果类别未退出,则为您添加 像 程序定义 程序执行
MySQL还是SQL Server?不要给未涉及的产品贴标签。。。你知道,这两个产品有非常不同的触发器…很抱歉,它是SQL Server
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