我有下表,需要某种约束,只允许客户只有一个供应商分销商。因此,如果您尝试更改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
这是否可以通过某种独特的约束来实现?
答案 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