我在 SQL Server 2016 中有一个表,如下所示。每个季度都会将所有合作伙伴的记录插入到表中。
需要约束:对于 Distribution_Type,应仅允许一个 BatchID 用于一年季度的 partnerID。但是,对于分配类型,对于给定的年度季度,合作伙伴允许有多个具有相同 BatchID 的记录。
如何在表中创建这样的约束?如果它可以在没有触发器的情况下完成,那就太好了。
桌子
CREATE TABLE [dbo].[Distribution]
(
[Distribtution_Result_ID] [int] IDENTITY(1,1) NOT NULL,
[PartnerID] [int] NOT NULL,
[Distribution_Year] [int] NOT NULL,
[Distribution_Quarter] [int] NOT NULL,
[Distribution_Amount] [decimal](16, 4) NULL,
[Distribution_Type] [varchar](100) NULL,
[Batch_ID] [int] NOT NULL
)
解释ypercubeᵀᴹ的评论:
如果要求是一个
BatchId
,PartnerId
,Year
,Quarter
那么Distribution_Type
您将需要一个表格,例如:当然,您需要相关的 FK 引用
PartnerID
以及Batch_ID
确保 Quarter 仅是有效值(1、2、3、4)的东西。然后,您将使用外键约束修改现有表以确保执行规则:
从远处看,还有很多工作要做,但至少我会说你需要:
Distribution_Type
仅允许有效值的参考表。Distribution_Type
或替换短名称/代码。Distribution
为除行标识符之外的其他键定义实际键。您可以在表上创建检查约束。如果所需的逻辑很复杂,您可以使用函数来实现您的目标。
这是另一个有很好例子的帖子。
https://stackoverflow.com/questions/21999707/complex-check-constraint