Связывание схемы с вычисленной функцией столбца - PullRequest
0 голосов
/ 18 июля 2011

У меня есть таблица TableA с вычисляемым столбцом FieldA, связанным с функцией, которая возвращает число с плавающей запятой. Функция GetFieldA, которая вызывает две подфункции.

У меня также есть представление, которое включает в себя функцию GetFieldA, а не вычисленное значение столбца в качестве поля. Я просто попытался добавить индекс в представление, которое говорит, что требуется GetFieldA для привязки к схеме, чтобы иметь индекс для него, я изменил его на привязку к схеме (что подразумевало удаление вычисляемого столбца), но потом, когда я пошел вернемся к попытке чтения вычисляемого столбца, который он сказал, чтобы использовать GetFieldA, схема должна быть удалена.

Есть ли способ получить вычисляемый столбец с функцией, связанной со схемой, или мне нужно переделать, как я получаю поле, чтобы иметь возможность иметь индекс представления?

1 Ответ

1 голос
/ 18 июля 2011

Невозможно добавить индекс для вычисляемого столбца, если он не является детерминированным.

"Детерминированные функции всегда возвращают один и тот же результат каждый раз, когда они вызываются с определенным набором входных значений и при том же состоянии базы данных. Недетерминированные функции могут возвращать разные результаты каждый раз, когда они вызываются с определенным набором входных значений, даже если состояние базы данных, к которой они обращаются, остается прежним. "

Пример:

CREATE FUNCTION dbo.FuncA()
RETURNS [float]
WITH SCHEMABINDING    -- required option
BEGIN
  RETURN 1.0   -- DB engine parses body, and marks this func. as 'deterministic'
END
GO

CREATE TABLE TableA (
  K int primary key clustered,
  A AS dbo.FuncA() PERSISTED    -- must be persisted
)
GO

CREATE VIEW ViewA
WITH SCHEMABINDING    -- required option
AS
  SELECT K, A FROM dbo.TableA
GO

CREATE UNIQUE CLUSTERED INDEX IDX1 ON dbo.ViewA (K, A)
GO

Вы должны указать PERSISTED для неточных типов данных, таких как [real] и [float], в противном случае вы можете свободно создавать индекс для представления с вычисляемым столбцом ([десятичное число] будет в порядке).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...