【问题标题】:Creating a unique column in SQL Azure Federation在 SQL Azure 联合中创建唯一列
【发布时间】:2012-09-17 14:19:14
【问题描述】:

我正在尝试在 SQL Azure 联合中创建一个唯一列,但即使以下查询创建了一个表,我仍然能够将条目保存到具有相同 Column1 值的表中。设置唯一列的正确方法是什么?我需要确保 ID 是联合的 uniqueidentifier 列,而就本演示而言,Column1 不能有重复值。

CREATE TABLE dbo.Table1(
        ID uniqueidentifier NOT NULL,
        Column1 nvarchar(50) NOT NULL,
        Column2 nvarchar(15) NULL,
 CONSTRAINT [PK_Table1] PRIMARY KEY CLUSTERED
 (
     ID ASC
 ),
CONSTRAINT [PK_Table2] UNIQUE NONCLUSTERED
 (
     ID ASC,
     Column1 ASC
 )
 ) FEDERATED ON ([dist] = ID)
 GO

【问题讨论】:

  • 不太明白这个问题。你不能在 Column1 上创建一个唯一的约束吗?
  • 这是我前段时间的原始问题:stackoverflow.com/questions/12416925/… 它解释了我想要做什么。基本上,一个 ID 列需要是主键,一个 EMAIL_ADDRESS 列需要有一个唯一的值。

标签: azure-sql-database unique-constraint


【解决方案1】:

没有测试,你不能这样做

CREATE TABLE dbo.Table1(
        ID uniqueidentifier NOT NULL,
        Column1 nvarchar(50) NOT NULL,
        Column2 nvarchar(15) NULL,
CONSTRAINT [PK_Table1] UNIQUE NONCLUSTERED
 (
     ID ASC,
     Column1 ASC
 )
 ) FEDERATED ON ([dist] = ID)
 GO

CREATE UNIQUE INDEX uix_table1_column1 ON Table1(Column1)
GO

然后您将拥有一个包含联邦的主键和一个单独的唯一约束。

【讨论】:

  • 那行不通。由于以下错误,不会创建 uix_table1_column1:“联合表上的唯一或聚集索引必须包含联合列。”我用 ON Table1(ID, Column1) 试过了。我能够创建表,但我仍然可以为 Column1 保存重复值。
  • 请注意,ID 列必须是主键,而 Column1 需要具有唯一值。所以,基本上每一列下都不能保存重复的值。
  • 我会说你运气不好。无论如何,我更喜欢在应用层中管理这样的唯一性。
猜你喜欢
  • 2012-09-07
  • 2013-03-04
  • 2013-06-23
  • 2014-03-07
  • 1970-01-01
  • 2020-01-01
  • 2020-10-01
  • 2012-08-22
  • 2012-01-04
相关资源
最近更新 更多