我有以下表格:
表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?
的存储过程答案 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 CONSTRAINT
和User Defined Function
可以解决此问题。
首先创建UDF dbo.CheckIDProduct
以从IDProduct
Table_2
的计数
之后在CHECK CONSTRAINT
Table_2
ALTER TABLE Table_2
ADD CONSTRAINT chkIDProductCount
CHECK (dbo.CheckIDProduct(IDProduct) <= 2);