首页 > 解决方案 > SQL Server:创建唯一索引的重复键

问题描述

我有一张股票报价表和日期:

StockID QuoteID QuoteDay    QuoteClose
---------------------------------------
5         95    2018-01-03    1.080
5         96    2018-01-04    1.110
5         97    2018-01-05    1.000
5         98    2018-01-06    1.030
5         99    2018-01-07    1.010
5        100    2018-01-08    0.899
5        101    2018-01-09    0.815

我创建了一个聚集索引来操作数据,但在索引中遇到了重复的键错误

CREATE UNIQUE CLUSTERED INDEX MACD_IDX ON #TBL_MACD_LOOP (StockId, QuoteId)

StockID和的不同组合QuoteID将产生相同的输出:

例如(StockID, QuoteID)(5, 11)(51, 1)产生 的索引511

我的解决方案是在 StockId 和 QuoteId 之间添加“-”。

现在(5, 11)生产5-11(51, 1)生产51-1

如何将字符串与值结合起来?

标签: sql-server-2012duplicatesstring-concatenationunique-index

解决方案


不,你肯定弄错了

(StockId, QuoteId)of(5, 11)和的组合(51, 1)两个截然不同的值对。

创建索引条目时,它们不会组合成单个值(如您所假设的)。511这是两个不同的值,因此可以在该表中共存 - 没问题。

为了证明这一点 - 只需运行以下INSERT语句:

INSERT INTO #TBL_MACD_LOOP(StockId, QuoteId, QuoteDay, QuoteClose)
VALUES (5, 11, '20180505', 42.76), (51, 1, '20180505', 128.07)

即使您的唯一索引到位,这INSERT也完全没有任何问题(当然,假设您的表中还没有这两对值之一)


推荐阅读