Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Deterministic Computed Column DATE on JSON_VALUE  [new]
deterministic_json
Guest
Подскажите, есть какие-нибудь варианты, сделать так, чтобы была computed column, и затем можно было навесить на нее INDEX при работе с JSON?

USE tempdb;
IF OBJECT_ID('T', 'U') IS NOT NULL
    DROP TABLE T;
CREATE TABLE T
(
    ID INT NOT NULL IDENTITY,
    Attributes VARCHAR(MAX),
    Date1 AS JSON_VALUE(Attributes,'$.Date'),
	Date2 AS CAST(JSON_VALUE(Attributes,'$.Date') AS DATE),
);
INSERT T(Attributes)
SELECT '{  "Date" : "2017-12-08" }' UNION SELECT '{  "Date" : "2017-12-10" }'
GO
CREATE NONCLUSTERED INDEX IX_Date1 ON T(Date1);
CREATE NONCLUSTERED INDEX IX_Date2 ON T(Date2);
GO


На выходе ошибка:
(2 rows affected)
Warning! The maximum key length for a nonclustered index is 1700 bytes. The index 'IX_Date1' has maximum length of 8000 bytes. For some combination of large values, the insert/update operation will fail.
Msg 2729, Level 16, State 1, Line 15
Column 'Date2' in table 'T' cannot be used in an index or statistics or as a partition key because it is non-deterministic.


В первом случае не нравится т.к. колонка становится вида строка и поиск работает только в таком формате:

SELECT * FROM dbo.T AS T
WHERE T.Date1='2017-12-08'

а так не работает
SELECT * FROM dbo.T AS T
WHERE T.Date1='20171208'


Про Deterministic CONVERT/CAST читал, может есть все таки какие-то возможности?

Спасибо
6 фев 18, 12:45    [21169590]     Ответить | Цитировать Сообщить модератору
 Re: Deterministic Computed Column DATE on JSON_VALUE  [new]
aleks222
Guest
Смотрим в книгу - видим фигу

CONVERT Deterministic unless one of these conditions exists:



Source type is sql_variant.

Target type is sql_variant and its source type is nondeterministic.

Source or target type is datetime or smalldatetime, the other source or target type is a character string, and a nondeterministic style is specified. To be deterministic, the style parameter must be a constant. Additionally, styles less than or equal to 100 are nondeterministic, except for styles 20 and 21. Styles greater than 100 are deterministic, except for styles 106, 107, 109 and 113.
6 фев 18, 15:12    [21170153]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить