Я пытаюсь создать таблицу под SQL Server 2008, содержащую столбец ГЕОМЕТРИЯ и его расчетный вариант.
Учитывая следующую таблицу, в которой вычисляемый столбец возвращает буферизованную геометрию:
CREATE TABLE [dbo].[Test] (
[Geometry] GEOMETRY NOT NULL,
[Buffer] FLOAT NOT NULL,
[BufferedGeometry] AS ([Geometry].STBuffer([Buffer])) PERSISTED
);
Проблема в том, что это приводит к следующей ошибке:
Msg 4994, Level 16, State 1, Line 2 Computed column 'BufferedGeometry' in table 'Test' cannot be persisted because the column type, 'geometry', is a non-byte-ordered CLR type.
У меня есть поиск по BOL и в Интернете, и я не могу найти решение моей проблемы. Я действительно хотел бы, чтобы он сохранялся, чтобы я мог эффективно его индексировать. Я мог бы установить это в коде, но тогда у меня есть вероятность несовместимых данных, поскольку мне требуются оба значения в какой-то момент времени.
Кто-нибудь играл с этим и знает решение или обходной путь?
Обновление: Microsoft добавила эту функцию в SQL Server 2012.
Следующее не работает: ALTER TABLE dbo.Period ADD [Interval] AS (geometry::STGeomFromText( 'LINESTRING (0 ' + CAST(CAST(DATEDIFF(SECOND, '19700101', StartDate) AS BIGINT) AS VARCHAR(20)) + ', 0 ' + CAST(CAST(DATEDIFF(SECOND, '19700101', EndDate) AS BIGINT) AS VARCHAR(20)) + '''', 0)) PERSISTED ;





Думаю, вы могли бы использовать триггер, чтобы вычислить его и сохранить в поле [BufferedGeometry].
Лично мне не нравится использовать триггеры в базах данных, мне не нужно было их использовать уже много лет, и, надеюсь, мне не придется прибегать к одному.
Я согласен - но иногда это единственный выход :-)
У кого все еще есть такая проблема: SQL Server 2012 теперь позволяет
Проголосуйте за этот элемент подключения: connect.microsoft.com/SQLServer/feedback/details/378126/…