Чтобы иметь возможность создавать индексное представление, оно должно быть детерминированным, то есть должно быть гарантировано, что оно будет одинаковым при каждом его запросе.
Является ли ваша пользовательская функция детерминированной ?
Детерминизм пользовательских функций
Является ли пользовательская функция
детерминированный или недетерминированный
зависит от того, как закодирована функция.
Пользовательские функции
детерминированный, если:
* The function is schema-bound.
* All built-in or user-defined functions called by the user-defined
функция является детерминированной.
* The body of the function references no database objects outside
область действия функции. За
Например, детерминированная функция
не может ссылаться на таблицы, кроме
переменные таблицы, которые являются локальными для
функция.
* The function does not call any extended stored procedures.
Пользовательские функции, которые не
соответствовать этим критериям помечены как
недетерминирован. Встроенный
недетерминированные функции не являются
разрешено в теле пользовательского
функции.
Является ли ваша функция SchemaBound?
alter function [dbo].[UserFunction]
(@example int = 1 )
returns int
with schemabinding
as
begin
return 1
end
Ваш взгляд на SchemaBound?
ALTER VIEW dbo.UserView
WITH SCHEMABINDING
AS
SELECT ID, [dbo].userFunction
Чтобы создать индексированное представление, вы должны сначала создать уникальный кластеризованный индекс (см. FAQ внизу) .