Swati_g1985 Ответов: 1

Как изменить вычисляемый столбец в таблице


Всем Привет,

У меня есть таблица, содержащая два вычисляемых столбца.
Col1 as (Val1+Val2)
Col2 as (Val3+Val4)

это имеет результат как:

Val1 Val2 Val3 Val4 Col1 Col2
-----------------------------
10 20 30 40 30 70

Теперь требование состоит в том, что я хочу изменить формулу вычисляемых столбцов следующим образом
Col1 as (Val1+Val3)
Col2 as (Val2+Val4)

Но наличие этого не должно изменять предыдущие данные, оно должно изменять только новые данные.

Это должно быть как:

Val1 Val2 Val3 Val4 Col1 Col2
-------------------------------
10 20 30 40 30 70 (существующие данные-не должны меняться)
1 2 3 4 4 6 (следует изменить данные в соответствии с новой формулой )


Заранее спасибо!

Что я уже пробовал:

Я попробовал сделать это с помощью ALTER table
Например
ИЗМЕНЕНИЕ ТАБЛИЦЫ ТЕМП
DROP COLUMN Col1

ИЗМЕНЕНИЕ ТАБЛИЦЫ ТЕМП
Добавить столбец Col1 как (Val1+Val3)

Но это также приводит к изменению предыдущих / существующих значений.

1 Ответов

Рейтинг:
0

Nirav Prabtani

Вы можете создать триггер вместо изменения столбцов

После вставки просто обновите столбцы col1 и col2 соответственно

Val1 + Val3 данные в Col1
Val2 + Val4 данные в Col2


напр.

CREATE TRIGGER TRIGGER_NAME ON dbo.TABLENAME
AFTER INSERT AS
DECLARE @REF_ID NVARCHAR(55);

SELECT @REF_ID=i.REF_ID FROM inserted i;

UPDATE TABLENAME SET COL1 = (VAL1 +VAL3),COL2 = (VAL2 +VAL4) WHERE REF_ID = @REF_ID

GO


Примечание : он написан без тестирования, возможно, вам придется изменить его в соответствии с вашими потребностями


Swati_g1985

Привет Нирав,

Я попробовал то же самое, но получил ниже ошибку
Столбец "COL1" не может быть изменен, поскольку он либо является вычисляемым столбцом, либо является результатом оператора объединения.

Nirav Prabtani

1) Добавить новый столбец
2) Обновите старое значение столбца до Нового
3) удалите старую колонку

Убедитесь, что новый столбец не должен быть вычислен

- Создать новый столбец (unpersisted):
ALTER TABLE TABLE_NAME
ДОБАВИТЬ ТИП ДАННЫХ COL_1

ОБНОВЛЕНИЕ ИМЯ_ТАБЛИЦЫ
УСТАНОВИТЬ COL_1 = COL1

-- Удалить сохраненный столбец
ALTER TABLE TABLE_NAME
DROP COLUMN COL1


подобный этому

Swati_g1985

COL1 должен вычислять столбец только в соответствии с существующей структурой.

CHill60

В этом случае вы не можете делать то, что хотите. Предложение Нирава использовать триггер - это единственный способ сохранить исторические данные при изменении расчета.
Зачем вообще нужен вычисляемый столбец? Просто включите расчет в свой выбор, определив идентификатор (или другие средства идентификации существующих данных, например, вставьте дату), и сделайте что-то вроде

SELECT Col1 = CASE WHEN ID <= 99 THEN Val1 + Val2 ELSE Val1 + Val3 END ..