【发布时间】:2017-04-09 06:37:16
【问题描述】:
我有 SQL Server 2016,我正在尝试为视图中的 json 列创建索引。
视图本身是建立在json之上的,如下
SELECT
_id,
JSON_VALUE(trade, '$.direction') AS direction,
JSON_VALUE(trade, '$.entryprice') AS entryprice,
JSON_VALUE(trade, '$.exitprice') AS exitprice,
JSON_VALUE(trade, '$.potentialtarget') AS potentialtarget,
FORMAT(CAST(JSON_VALUE(trade, '$.entrytime') AS datetimeoffset), 'yyyy-MM-dd HH:mm:ss') AS entrytime,
FORMAT(CAST(JSON_VALUE(trade, '$.exittime') AS datetimeoffset), 'yyyy-MM-dd HH:mm:ss') AS exittime,
JSON_VALUE(trade, '$.maxfavourable') AS maxfavourable,
JSON_VALUE(trade, '$.maxagainst') AS maxagainst,
JSON_VALUE(trade, '$.signal') AS signal,
JSON_VALUE(trade, '$.instrument') AS instrument,
JSON_VALUE(trade, '$.account') AS account,
JSON_VALUE(trade, '$.quantity') AS quantity,
JSON_VALUE(trade, '$.gains') AS gains,
JSON_VALUE(trade, '$.hitedge') AS hitedge,
JSON_VALUE(trade, '$.RealizedProfitLoss') AS RealizedProfitLoss,
JSON_VALUE(trade, '$.CashValue') AS CashValue,
JSON_VALUE(trade, '$.BuyingPower') AS BuyingPower,
JSON_VALUE(trade, '$.maxagainst1ATR') AS maxagainst1ATR,
JSON_VALUE(trade, '$.maxagainst2ATR') AS maxagainst2ATR,
JSON_VALUE(trade, '$.Powerbars') AS powerbars,
JSON_VALUE(trade, '$.PowerbarsTime[0]') AS PowerbarsTime1,
JSON_VALUE(trade, '$.PowerbarsTime[1]') AS PowerbarsTime2,
JSON_VALUE(trade, '$.PowerbarsTime[2]') AS PowerbarsTime3,
JSON_VALUE(trade, '$.PowerbarsTime[3]') AS PowerbarsTime4,
JSON_VALUE(trade, '$.PowerbarsTime[4]') AS PowerbarsTime5,
JSON_VALUE(trade, '$.Powerbarsdetails') AS Powerbarsdetails,
JSON_VALUE(trade, '$.entrysignal') AS entrysignal,
JSON_VALUE(trade, '$.exitsignal') AS exitsignal
FROM
dbo.Trades
我正在尝试在 _id 和一些日期时间列上建立索引。我收到一个错误:
索引“NonClusteredIndex-20161124-152652”的创建失败。 (Microsoft.SqlServer.Smo)
执行 Transact-SQL 语句或批处理时发生异常。 (Microsoft.SqlServer.ConnectionInfo)
无法在视图“dbo.vTrades”上创建索引。它没有唯一的聚集索引。 (Microsoft SQL Server,错误:1940)
【问题讨论】:
-
您需要在该表上创建唯一的聚集索引,然后才能创建非聚集索引。它在错误消息中这么说。
标签: sql-server