在SQL Server中,我创建了一个包含两列的视图。普通列和计算的哈希列。我需要在这两列上创建一个唯一约束。由于GetHash UDF,尝试添加约束或索引会导致错误。
CREATE VIEW HashView
WITH SCHEMABINDING
AS
SELECT p.ItemId, [dbo].[GetHash](p.Id) as PriceHash from dbo.price p
有没有一种简单的方法可以解决这个问题,还是需要使用触发器?
答案 0 :(得分:1)
SQL Server不愿意相信您的CLR功能是确定性的。因此,只有在持久化时才允许对CLR计算列进行索引。
请参阅:https://docs.microsoft.com/en-us/sql/relational-databases/indexes/indexes-on-computed-columns
答案 1 :(得分:0)
制作你的观点,
CREATE VIEW HashView
WITH SCHEMABINDING
AS
SELECT p.ItemId,p.Id, [dbo].[GetHash](p.Id) as PriceHash from dbo.price p
然后像往常一样在itemid和id上创建唯一的复合约束
CREATE UNIQUE INDEX IX_HashView ON dbo.HashView(itemid,id)
GO