SQL Server:从创建唯一索引的重复键

时间:2018-04-29 20:18:54

标签: sql-server-2012 duplicates string-concatenation unique-index

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

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的不同组合将产生相同的输出:

例如(StockID, QuoteID)(5, 11)的{​​{1}}都生成(51, 1)的索引。

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

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

如何将字符串与值组合?

1 个答案:

答案 0 :(得分:1)

不,你绝对是错误

(StockId, QuoteId) (5, 11)(51, 1)的{​​{1}}组合是两个明显不同的值对。

在创建索引条目时,它们 NOT combined 成为单个值(假设为511)。那些是两个不同的值,因此可以在该表中共存 - 没问题。

要证明这一点 - 只需运行此INSERT声明:

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

即使您使用了唯一的索引,这个INSERT也可以毫无问题地工作(假设您的表格中没有这两对值中的一对),