Sql server 2012 SQL Server:从创建唯一索引中复制密钥

Sql server 2012 SQL Server:从创建唯一索引中复制密钥,sql-server-2012,duplicates,string-concatenation,unique-index,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

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

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

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

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

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


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

不,您肯定是错的

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

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

要证明这一点,只需运行以下
INSERT
语句:

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

即使有了唯一的索引,这个
INSERT
也不会有任何问题(当然,假设您的表中还没有这两对值中的一对)

,因为我得到了重复键错误,检查重复项的最佳方法是什么?@Coding_Newbie:如果插入一对值失败-只需运行
SELECT*FROM#TBL_MACD_LOOP,其中StockId=xx和QuoteId=yy
,并找到罪魁祸首。完整的错误消息将包含SQL Server发现的值作为重复密钥。我希望您在运行
SELECT*FROM#TBL_MACD_循环时会发现不止一行,其中StockID=和QuoteID=