У меня есть таблица со столбцом типа xml (DOCUMENT <MyDocType>)
, для которой я определил очень маленькую схему. Примерно XML имеет такую простую форму:
<root>
(<a> | <b>)*
</root>
То есть root с 0 или более дочерними элементами типа a
или b
. Вот и все.
Я хотел бы иметь постоянный вычисляемый столбец из этих данных, из объединенных в строку строк значений каждого дочернего элемента root
; поэтому я создаю UDF для строкового определения содержимого каждого документа:
create function stringify (@doc xml (document MyDocType))
returns varchar(256)
as begin
return convert(varchar(256), @doc.query('
for $val in /root/*
return string($val)'))
end
Но при использовании этой функции в качестве источника постоянного столбца база данных жалуется, что функция не определена c.
Я бы сказал, что эта функция, по моей человеческой интуиции, детерминирована c. Но база данных, похоже, не согласна со мной. Я понимаю, что, возможно, XQuery может делать какие-то недетерминированные c вещи, но разве эта простая возможность портит все запросы XQuery недетерминированностью?
Есть ли способ сообщить базе данных, что " эй, эта функция, которая принимает XML и возвращает строку, является детерминированной c - позвольте мне извлечь из нее постоянный вычисляемый столбец "?