如何索引计算的哈希列

How to index a calculated hash column

在 SQL 服务器中,我创建了一个包含两列的视图。一个普通列和一个计算的哈希列。我需要在这两列上创建一个唯一约束。由于 GetHash UDF,尝试添加约束或索引会导致错误。

CREATE VIEW HashView
WITH SCHEMABINDING    
AS
SELECT p.ItemId, [dbo].[GetHash](p.Id) as PriceHash from dbo.price p

有没有简单的方法来解决这个问题,还是我需要求助于使用触发器?

SQL 服务器不愿意相信您的 CLR 函数是确定性的。因此只允许在持久化时对 CLR 计算列进行索引。

参见:https://docs.microsoft.com/en-us/sql/relational-databases/indexes/indexes-on-computed-columns

让你的观点像这样,

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