t-SQL - 对具有多个条件的一列的约束



我目前正在重新构建一个设计不佳的数据库,出于完整性目的,我想做的一件事是使某个记录唯一依赖于几个变量。

我使用的表格是报价,有问题的列是报价号,我需要的是每个公司和集团都是唯一的,因此例如,除非有新的公司/组使用,否则Quote001应该是唯一的。

因此,您可以使用company1group1 Quote001,但是如果使用company1group1进行新报价,则应Quote002新报价编号。但是,如果Company2group1报价,它应该回到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)

相关内容

  • 没有找到相关文章

最新更新