Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Не материализует вычисляемый столбец по причине его недетерминированости  [new]
Vlad__i__mir
Member

Откуда:
Сообщений: 294
Доброго времени суток!

Пытаюсь создать следующею таблицу с расчётным столбцом, который должен быть материализован:
CREATE TABLE Geographical_koordinates (
    Id_Geographical_koordinates int NOT NULL IDENTITY (1,1) PRIMARY KEY,
    Koordinate geography NOT NULL,
    SRID INT NULL,
    Radius_action INT,
    All_koordinates_area AS Koordinate.STBuffer(Radius_action) PERSISTED,
    Koordinate_text AS Koordinate.STAsText() PERSISTED,
    All_koordinates_area_txt AS dbo.AreaInText(Koordinate,Radius_action) PERSISTED,
    Heigh_sea_level int NULL,
    description nvarchar(50) NULL);
    GO

Функция:
CREATE FUNCTION [dbo].[AreaInText] (@Koordinate geography, @Radius_action int)
 RETURNS nvarchar(max)
 AS
 BEGIN
 DECLARE @area geography;
 DECLARE @areaText nvarchar(max);
 SET @area=@Koordinate.STBuffer(@Radius_action);
 SET @areaText=@area.STAsText();
 RETURN(@areaText);
 END
GO


В 8-ой строке использую функцию, которая не обращается к внешним данным и использует только функции STAsText() и STBuffer(), которых не нашёл в списке детерминированных и не детерминированных. Но так как на 6 и 7 строку, где используются те же функции SQL не ругается и принимает их соответственно они должны быть детерминированы. Но почему-то выдаёт ошибку:
Сообщение 4936, уровень 16, состояние 1, строка 4
Невозможно материализовать вычисляемый столбец "All_koordinates_area_txt" в таблице "Geographical_koordinates", так как он является недетерминированным.


Почему же столбец всё равно получается недетерминированным?

Это можно как-то исправить?
6 фев 18, 18:54    [21170941]     Ответить | Цитировать Сообщить модератору
 Re: Не материализует вычисляемый столбец по причине его недетерминированости  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Vlad__i__mir,

ну для начала WITH SCHEMABINDING
6 фев 18, 18:55    [21170945]     Ответить | Цитировать Сообщить модератору
 Re: Не материализует вычисляемый столбец по причине его недетерминированости  [new]
Vlad__i__mir
Member

Откуда:
Сообщений: 294
TaPaK
Vlad__i__mir,

ну для начала WITH SCHEMABINDING


Можно по-подробнее, не понял что имеется в виду
6 фев 18, 18:57    [21170954]     Ответить | Цитировать Сообщить модератору
 Re: Не материализует вычисляемый столбец по причине его недетерминированости  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Vlad__i__mir,

CREATE FUNCTION [dbo].[AreaInText] (@Koordinate geography, @Radius_action int)
 RETURNS nvarchar(max)
WITH SCHEMABINDING
AS
...
6 фев 18, 19:03    [21170973]     Ответить | Цитировать Сообщить модератору
 Re: Не материализует вычисляемый столбец по причине его недетерминированости  [new]
Vlad__i__mir
Member

Откуда:
Сообщений: 294
TaPaK
Vlad__i__mir,

CREATE FUNCTION [dbo].[AreaInText] (@Koordinate geography, @Radius_action int)
 RETURNS nvarchar(max)
WITH SCHEMABINDING
AS
...


Спасибо! Я читал, что SCHEMABINDING используется для представлений, чтобы нельзя было изменить базовую таблицу таким способом, который может повлиять на определение представления. А здесь на что он накладывает ограничение?
6 фев 18, 19:07    [21170987]     Ответить | Цитировать Сообщить модератору
 Re: Не материализует вычисляемый столбец по причине его недетерминированости  [new]
msLex
Member

Откуда:
Сообщений: 8093
Vlad__i__mir
TaPaK
Vlad__i__mir,

CREATE FUNCTION [dbo].[AreaInText] (@Koordinate geography, @Radius_action int)
 RETURNS nvarchar(max)
WITH SCHEMABINDING
AS
...



Спасибо! Я читал, что SCHEMABINDING используется для представлений, чтобы нельзя было изменить базовую таблицу таким способом, который может повлиять на определение представления. А здесь на что он накладывает ограничение?

что вы не поменяете функцию, не удалив ее предварительно из default-а
6 фев 18, 19:45    [21171057]     Ответить | Цитировать Сообщить модератору
 Re: Не материализует вычисляемый столбец по причине его недетерминированости  [new]
Vlad__i__mir
Member

Откуда:
Сообщений: 294
msLex
Vlad__i__mir
пропущено...


Спасибо! Я читал, что SCHEMABINDING используется для представлений, чтобы нельзя было изменить базовую таблицу таким способом, который может повлиять на определение представления. А здесь на что он накладывает ограничение?

что вы не поменяете функцию, не удалив ее предварительно из default-а


Спасибо! А что такое default?
6 фев 18, 20:33    [21171145]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить