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=代码>