Ste*_*ood 4 sql sql-server check-constraint sql-server-2012
我有一个通过中间CustomerAddress表链接到地址表的customers表.这意味着客户可以拥有多个地址,而地址可以拥有许多客户.(这是必要的,因为我们将配偶和子女作为单独的客户处理,每个人都可以有交付,工作,账单和其他地址).
我希望客户能够指定首选地址.
我的想法是在customers表中创建一个链接到CustomerAddress记录的新列.
我的问题是 - 如何确保所选择的首选地址是该客户地址之一?
我的想法是在customers.preferredAddress字段上放置一个Check约束,该字段检查给定的CustomerAddress以查看该记录的客户ID是否与正在更新的客户匹配.
这可能吗?我只使用Check约束来检查像(Value> 0)等简单的东西.
谢谢你的帮助
编写UDF以验证地址所有权,然后从检查约束引用该UDF.
CREATE FUNCTION dbo.fnIsAddressOwner (
@CustomerId int,
@AddressId int
)
RETURNS tinyint
AS
BEGIN
DECLARE @Result tinyint
IF EXISTS(SELECT * FROM CustomerAddresses WHERE CustomerId=@CustomerId and AddressId=@AddressId)
SET @Result= 1
ELSE
SET @Result= 0
RETURN @Result
END
CREATE TABLE Customers (
CustomerId int,
PreferredAddressId int,
CONSTRAINT ckPreferredAddressId CHECK (
dbo.fnIsAddressOwner(CustomerId, PreferredAddressId) = 1)
)
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3532 次 |
| 最近记录: |