SQL字段约束

时间:2016-05-18 10:00:49

标签: sql-server constraints

我有下表,需要某种约束,只允许客户只有一个供应商分销商。因此,如果您尝试更改SupplierClientID记录的ProductDistribution字段' 2'为了真实,它不会起作用,因为客户端(847)已经为SupplierID 10启用了。

供应商表

SupplierClientID  ClientID  SupplierID  ProductDistribution
1                 847         10        1
2                 847         11        0
3                 800         10        1
4                 800         11        0
5                 800         12        0
6                 570         11        1
7                 570         12        0

这是否可以通过某种独特的约束来实现?

2 个答案:

答案 0 :(得分:5)

SQL Server提供了唯一的索引。

以下索引仅允许客户和供应商的唯一组合:

people_formset

要允许一个客户只有一次ProductDistribution为1,您需要另一个索引:

CREATE UNIQUE NONCLUSTERED INDEX NCUIX_Suplier_ClientSupplier
   ON dbo.Supplier (ClientID , SupplierID); 
GO

如果您不想拥有约束的索引,可以使用检查约束和函数来实现更广泛的方法:

CREATE UNIQUE NONCLUSTERED INDEX NCUIX_Suplier_ClientActiveDistribution
   ON dbo.Suplier (ClientID) WHERE ProductDistribution = 1 ; 
GO

了解唯一索引:https://msdn.microsoft.com/en-us/library/ms187019(v=sql.120).aspx

了解唯一约束:http://www.w3schools.com/sql/sql_unique.asp

了解检查约束:https://msdn.microsoft.com/en-us/library/ms190377(v=sql.120).aspx

答案 1 :(得分:1)

这也有用

 --Create index SupplierClients_ ProductDistribution
Create UNIQUE NONCLUSTERED INDEX NCUIX_Suplier_ClientSupplier
   ON dbo.SupplierClients (ClientID ) WHERE ProductDistribution = 1 ; 
GO