SQL 服务器:创建唯一索引的重复键

SQL Server : duplicate key from creating unique index

我有 table 个股票报价和日期:

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)

StockIDQuoteID 的不同组合将产生相同的输出:

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

我的解决办法是在StockId和QuoteId之间加上“-”。

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

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

不对,你肯定看错了

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

在创建索引条目时,它们 未合并 为单个值(如您假设的 511)。这些是 两个不同的值,因此可以共存 table - 没问题。

为了证明这一点 - 只是 运行 这个 INSERT 声明:

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

即使您的唯一索引就位,这个 INSERT 也可以毫无问题地工作(假设您的 table 中还没有这两对值之一,当然)