繁体   English   中英

Scope_Identity链接2个表

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM