gpt4 book ai didi

sql - 唯一索引并将多个值视为一个 SQL

转载 作者:行者123 更新时间:2023-12-02 08:20:21 25 4
gpt4 key购买 nike

我有一张这样的表:

CREATE TABLE [dbo].[BigTable]
(
[BigTableId] [int] IDENTITY(1,1) NOT NULL,
[MuchText] [nvarchar](10) NOT NULL,
[Type] [smallint] NOT NULL
(...)
)

栏目 MuchText可以存储任何文本值和列 Type可以存储数字 1、2、3、4。

我想在 MuchText 上创建唯一索引或其他可以给我类似结果的索引和 Type列(因此两个值的组合将被迫是唯一的)。

但问题来了——我想处理 Type 中的一些值列为一。让我解释一下它应该如何工作:
  • 禁止插入值为 Type = 1 的记录和 MuchText = 'XXX'如果记录带有值 Type = 1MuchText = 'XXX'已存在
  • 禁止插入值为 Type = 1 的记录和 MuchText = 'XXX'如果记录带有值 Type = 2MuchText = 'XXX'已存在
  • 禁止插入值为 Type = 1 的记录和 MuchText = 'XXX'如果记录带有值 Type = 3MuchText = 'XXX'已经存在

    等等,对于类型 1/2/3,但对于 Type = 4,它应该表现得像一个经典的唯一索引:
  • 对于 Type = 4 ,禁止插入值为Type = 4的记录和 MuchText = 'XXX'如果记录带有值 Type = 4MuchText = 'XXX'已存在

  • 所以这应该是不可能的:
  • 类型 = 1,MuchText = 'XXX'
  • Type = 2,MuchText = 'XXX'(不允许,因为已经有一个 Type = 1 且具有相同 MuchText 值的记录)。

  • 但这没关系:
  • 类型 = 1,MuchText = 'XXX'
  • 类型 = 4,MuchText = 'XXX'
  • 最佳答案

    您可以添加一个计算列,该列对于应组合在一起的所有类型(下面的 Grp)具有相同的值,并将其包含在约束中。

    CREATE TABLE [dbo].[BigTable](
    [BigTableId] [int] IDENTITY(1,1) NOT NULL,
    [MuchText] [nvarchar](10) NOT NULL,
    [Type] [smallint] NOT NULL,
    Grp AS CASE WHEN [Type] IN (1,2,3) THEN 1 ELSE 2 END,
    UNIQUE(Grp, MuchText)
    )

    关于sql - 唯一索引并将多个值视为一个 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37777500/

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