插入唯一非重复值时出现重复错误 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 值
因此,您要么必须修改索引,要么重新考虑您的查询。
这是我无法克服的另一个错误:
我正在尝试添加(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 值
因此,您要么必须修改索引,要么重新考虑您的查询。