【问题标题】:How to index a calculated hash column如何索引计算的哈希列
【发布时间】:2017-05-25 20:59:18
【问题描述】:

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

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

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

【问题讨论】:

  • 这个函数有什么作用?和HASHBYTES()一样的东西?

标签: sql-server view unique-constraint udf


【解决方案1】:

SQL Server 不愿意相信您的 CLR 函数是确定性的。因此,如果持久化,则只允许对 CLR 计算列进行索引。

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

【讨论】:

  • 谢谢。我怀疑可能是这种情况。我将使用触发器来完成工作。
【解决方案2】:

把你的观点变成这样,

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

【讨论】:

    猜你喜欢
    • 2016-06-23
    • 2017-03-26
    • 2012-08-22
    • 2019-05-31
    • 2020-04-28
    • 1970-01-01
    • 2011-02-26
    相关资源
    最近更新 更多