Eu tenho uma tabela no SQL Server 2016, conforme mostrado abaixo. Os registros são inseridos na tabela a cada trimestre, para todos os parceiros.
Restrição necessária: deve permitir apenas um BatchID para um partnerID por um trimestre de um ano, para um Distribution_Type. No entanto, é permitido ter vários registros com o mesmo BatchID para o parceiro em um determinado trimestre do ano, para um tipo de distribuição.
Como criar tal restrição na tabela? Se puder ser feito sem gatilho, seria ótimo.
Mesa
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
)
Para explicar o comentário de ypercubeᵀᴹ :
Se o requisito for um
BatchId
porPartnerId
,Year
,Quarter
,Distribution_Type
você precisará de uma tabela como:É claro que você precisaria das referências FK relevantes
PartnerID
eBatch_ID
também de algo para garantir que Quarter seja apenas valores válidos (1,2,3,4).Você então modificaria sua tabela existente com a restrição de chave estrangeira para garantir que a regra seja aplicada:
De longe, há muito mais trabalho a ser feito, mas no mínimo eu diria que você precisaria:
Distribution_Type
permitir apenas valores válidos.Distribution_Type
ou substitua um nome abreviado/código.Distribution
além do identificador de linha.Você pode criar uma restrição de verificação em sua tabela. Se a lógica necessária for complexa, você poderá usar uma função para atingir seu objetivo.
Aqui está outro post com um bom exemplo.
https://stackoverflow.com/questions/21999707/complex-check-constraint