插入唯一非重复值时出现重复错误 T-SQL

Duplicate Error when inserting unique non duplicate values T-SQL

这是我无法克服的另一个错误:

我正在尝试添加(INSERT INTO sql 语句)来自 WHID 字段的唯一记录 (ClientEpisode table) 进入 WHID 字段 (EHREpisode table):

      INSERT INTO 
                  [WH].[Fact].EHREpisode ([WHID])
         SELECT
               [HP].[bhcms5].ClientEpisode.WHID
         FROM
             [HP].[bhcms5].ClientEpisode

两个 WHID 字段在两个 table 中以及彼此之间都是唯一的(非重复的),但我一直有错误:

请查看错误消息,大写字母:

"无法在具有唯一索引 'IX_EHREpisode' 的对象 'Fact.EHREpisode' 中插入重复键行。重复键值为 (NULL, NULL>)。 声明已终止。"

下面是我的 table 结构:

EHRE情节:

客户端插曲:

错误消息似乎在说 NULL 值是罪魁祸首(您的屏幕截图难以阅读)。因此,您可以尝试从插入中排除 NULL 个值:

INSERT INTO [WH].[Fact].EHREpisode ([WHID])
SELECT [HP].[bhcms5].ClientEpisode.WHID
FROM [HP].[bhcms5].ClientEpisode
WHERE [HP].[bhcms5].ClientEpisode.WHID IS NOT NULL;

作为替代方案,考虑在 WHID 上使用索引,它会忽略 NULL 值:

CREATE UNIQUE NONCLUSTERED INDEX idx_col1
ON [HP].[bhcms5].ClientEpisode (WHID)
WHERE WHID IS NOT NULL;

错误很明显:有一个名为 IX_EHREpisode 的唯一索引,其中包含您的查询尝试插入值 (null,null) 两次的列。

您为我们提供了一组与此无关的SSMS GUI 图片。相反,使用 GUI 的方式是:

  • 转到SSMS左侧的"Object explorer"
  • 找到您感兴趣的 table "EHREpisode"
  • 打开 "Indexes"。你应该在这里找到 IX_EHREpisode。打开它。
  • 在里面您会看到该索引中包含的列。如果您的查询被执行
  • ,将会有一些都采用 NULL 值

因此,您要么必须修改索引,要么重新考虑您的查询。