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

时间:2018-12-07 05:55:16

标签: sql-server tsql unique-index

这是我无法抗拒的另一个错误:

我正在尝试从WHID字段添加(INSERT INTO sql语句)唯一记录 (ClientEpisode表)插入WHID字段(EHREpisode表):

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

WHID字段在两个表中以及彼此之间都是唯一的(不可重复),但是我一直遇到错误:

enter image description here

Plz,请以较大的字母查看错误消息:

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

下面是我的表结构:

EHRE案例: enter image description here

ClientEpisode: enter image description here

2 个答案:

答案 0 :(得分:2)

错误消息似乎说明了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;

答案 1 :(得分:1)

错误非常明显:存在一个名为IX_EHREpisode的唯一索引,其中的列使您的查询尝试两次插入值(null,null)。

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

  • 转到SSMS左侧的“对象资源管理器”
  • 找到您感兴趣的表“ EHREpisode”
  • 打开“索引”。您应该在这里找到IX_EHREpisode。打开它。
  • 在内部,您将看到此索引中包含的列。如果执行查询,其中会有两个都将为NULL值

因此,您将不得不修改索引或重新考虑您的查询。