gpt4 book ai didi

sql-server - 如何在 SQL Server 中的 NVARCHAR(MAX) 列上强制执行唯一性?

转载 作者:行者123 更新时间:2023-12-03 12:22:18 25 4
gpt4 key购买 nike

我在 SQL Server 2008 R2 中有一个 NVARCHAR(MAX) 列。我想在该列上设置唯一索引,但唯一索引中包含的列的最大大小为 NVARCHAR(450) 或 900 字节。

如何在 NVARCHAR(MAX) 列上强制执行唯一性?

谢谢!

最佳答案

  • 在某种散列上创建一个持久化列,例如 CHECKSUM。例如:Hash = MyStringHash as CHECKSUM(MyString)
  • 在该列上创建一个非唯一索引
  • 创建一个强制唯一性的触发器。需要索引来加快 EXISTS 子句中的搜索:
            WHERE   NOT EXISTS ( SELECT 1
    FROM YourTable AS y
    WHERE y.MyStringHash = CHECKSUM(Inserted.MyString)
    AND y.MyString = Inserted.MyString) ;

  • 重要提示:您需要针对您的排序规则进行测试。如果您使用不区分大小写的排序规则,请确保触发器不允许“MyTest”和“MYTEST”。

    如果您寻找唯一索引并就此止步,那么您只是在创建一个等待发生的错误。

    编辑:在不区分大小写的环境中,我将 CHECKSUM 用于持久化计算列,该列速度快、不区分大小写且具有足够的选择性。

    关于sql-server - 如何在 SQL Server 中的 NVARCHAR(MAX) 列上强制执行唯一性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6793431/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com