Калькулируемое поле.

Владимир
Дата: 26.02.2001 17:11:45
Есть ли возможность изменить обычное поле на калькулируемое, т.е.
Есть таблица:
Create table MyTable1 (
Price money,
Quantity money,
Amount money,
PaymentDate datetime )

А надо:
Create table MyTable1 (
Price money,
Quantity money,
Amount as (Price * Quantity) money,
PaymentDate datetime )

Проблема в следующем:
1. В таблице уже есть данные.
2. Много связей.
3. Поле должно остаться на своем месте.

В идеале выполнить такое предложение: Alter table MyTable1 alter column Amount as (Price * Quantity).

Еще хотелось бы узнать есть ли готовые инструменты для изменения порядкового номера колонки в таблице?
Константин
Дата: 28.02.2001 21:57:24
Желание иметь в таблице калькулируемое поле противоречит требованию к нормализации таблиц. Ни одно не ключевое поле не должно функционально зависить от других неключевых полей. Таких полей в эффективно работающей базе быть не должно. Если уж действительно надо иметь такое поле, используйте представление (view) по таблице без этого поля.
Существующее поле можно оставить, а потом использовать для чего-либо полезного, которое может появится в будущем.
Если это поле сильно увеличивает базу, то единственный путь -

Create table _MyTable1 (
Price money,
Quantity money,
PaymentDate datetime )

insert into _MyTable1 (Price,Quantity,PaymentDate)
select Price,Quantity,PaymentDate from MyTable1

Потом MyTable1 уничтожить, а _MyTable1 переименовать в MyTable1
Дед Маздай
Дата: 01.03.2001 13:11:45
В жизни бывает всякое и иногда для практ.целей БД, наоборот, приходится денормализовывать. Типич.пример - OLAP-приложения. Выч.поля - вещь полезная, более того, в 2000-м по ним можно еще и индексы создавать. Изменить поле на вычисляемое при помощи ALTER COLUMN, очевидно, не удастся, т.к. в нем уже есть данные и что делать, если они противоречат формуле? Поэт. проходит т. ADD COLUMN. Вообще говоря, в терминах SQL порядок полей никак не определяется и не задается. Придется создать новую таблицу и переписать данные из старой. Даже если представить себе, что существовала бы гипот.команда ALTER TABLE, меняющая физ.порядок следования полей в табл., проку от нее было бы очень мало, т.к. по времени это все равно созд-е новой стр-ры и перекачка в нее данных из старой.