在表中仅接受N个相同的Id

时间:2017-01-13 07:31:44

标签: sql-server

我有以下表格:

表1

IDProduct | Price
--------- | -----
1         | $500
2         | $100 

表2

IDProduct | Desc
--------- | ------
1         | Desc 1
1         | Desc 2
1         | Desc 3

我想要做的只是在表2中接受总共3个具有相同Id的寄存器,如上例所示,如果我尝试用Id 1注册另一行,则必须发生错误或者某事,这是否可能在Sql Server中做或者我需要在sql(js,php,c#等)之外处理这个。

换句话说,我希望我的表1只接受带有相同IdProduct的3行,也许我必须尝试使用​​触发器? if,else?

的存储过程

2 个答案:

答案 0 :(得分:0)

在SQL Server存储过程中,您可以简单地实现此目的:

CREATE PROCEDURE [dbo].[proc_InsertProduct]
(   @ProductId   INT, @Price DECIMAL (9,2)   ) 
AS
BEGIN

    DECLARE @ProductCount AS INT = 0
    SELECT @ProductCount = COUNT(*) FROM Table2 WHERE IDProduct = @ProductId   

   IF @ProductCount < 3
       INSERT INTO Table1 (IDProduct, Price) VALUES (@ProductId, @Price)
   ELSE
      -- You can RAISEERROR or some other way to notify the insert is not happen

END

答案 1 :(得分:0)

使用CHECK CONSTRAINTUser Defined Function可以解决此问题。

首先创建UDF dbo.CheckIDProduct以从IDProduct

获取Table_2的计数

之后在CHECK CONSTRAINT

上添加Table_2
ALTER TABLE Table_2
  ADD CONSTRAINT chkIDProductCount
  CHECK (dbo.CheckIDProduct(IDProduct) <= 2);