我目前正在重新构建一个设计不佳的数据库,出于完整性目的,我想做的一件事是使某个记录唯一依赖于几个变量。
我使用的表格是报价,有问题的列是报价号,我需要的是每个公司和集团都是唯一的,因此例如,除非有新的公司/组使用,否则Quote001
应该是唯一的。
因此,您可以使用company1
和group1
Quote001
,但是如果使用company1
和group1
进行新报价,则应Quote002
新报价编号。但是,如果Company2
和group1
报价,它应该回到Quote001
。
我不确定如何利用数据库中的约束来最有效地实现这一目标。
谢谢大卫
如果此表上已经有一个标识列,我将使用它为 qoute 编号创建一个计算列。如果你没有,你可以添加它。
为此,首先您需要定义一个 UDF 来为您执行计算:
CREATE FUNCTION dbo.CalculateQuoteNumber(@id int, @Company int, @Group int)
RETURNS int
AS
BEGIN
RETURN
(
SELECT COUNT(*)
FROM YourTable
WHERE Company = @Company
AND [Group] = @Group
AND id <= @id
)
END
GO
然后,将报价编号添加为计算列:
ALTER TABLE YourTable
ADD QuoteNumber as dbo.CalculateQuoteNumber(id, Company, [Group])
现在,sql server 将为您进行计算,并且您是安全的,因为计算列无法由用户插入或更新。
您可以在rextester上看到现场演示。
你需要一个唯一的约束。
ALTER TABLE Quotes
ADD CONSTRAINT ucQuote UNIQUE (QuoteNumber, Company, Group)