У меня есть столбец XML в таблице; Я хочу «продвигать» определенное значение в этом XML как вычисляемый столбец и индексировать его для более быстрого поиска. У меня есть функция, которая принимает информацию XML и выводит интересующий элемент, например:
CREATE FUNCTION [dbo].[fComputeValue] (@data XML)
RETURNS datetime
WITH SCHEMABINDING
AS
BEGIN
RETURN @data.value('(/Metadata/Value[@Key="StartDate"])[1]', 'datetime')
END
Однако, когда я пытаюсь создать вычисляемый столбец:
ALTER TABLE dbo.CustomMetadataTable ADD [StartDate] AS ([dbo].[fComputeValue]([CustomMetadataColumn])) PERSISTED
Я получаю следующую ошибку:
Сообщение 4936, уровень 16, состояние 1, строка 2
Вычисляемый столбец
'Дата начала'
в таблице 'CustomMetadataTable' нельзя
сохраняется, потому что столбец
недетерминирована.
Это работает, если я:
- работа со значениями varchar, int, double (т. Е. Кроме datetime)
- удалить ключевое слово PERSISTED (но тогда я не могу создать индекс для столбца)
Следует также отметить, что значения даты и времени представлены в формате XSD datetime.
Есть идеи? Спасибо.