Значение столбца по умолчанию на основе значения другого столбца - PullRequest
3 голосов
/ 16 февраля 2010

SQL Server 2005. У меня есть таблица с битом ColumnA, ColumnB int

Можно ли добавить значение по умолчанию к ColumnB, чтобы ColumnB равнялось 15, если ColumnA равно 1, и ColumnB равно 0, если ColumnA равно 0?

Я знаю, что могу сделать это с помощью триггера, но я, мой босс, предубежден против триггеров (ему нужно тренировка чувствительности к триггерам).

Ответы [ 6 ]

8 голосов
/ 16 февраля 2010

если ваш ColumnB может быть только 15 или ноль, вы можете сделать его вычисляемым столбцом на основе ColumnA. Вот код для добавления нового вычисляемого столбца:

ALTER TABLE YourTable ADD YourComputedColumn AS ColumnA*15
go
1 голос
/ 16 февраля 2010

Вычисляемые столбцы довольно полезны в определенных сценариях. Стоит отметить, что они могут (но не должны) сохраняться. Выбор того, должен ли столбец сохраняться или нет, зависит от того, как он используется. Если он сохраняется, он использует пространство как «обычный» столбец, в противном случае вычисляется во время выполнения. Вы также можете создавать индексы для вычисляемых столбцов.

http://msdn.microsoft.com/en-us/library/ms191250.aspx

1 голос
/ 16 февраля 2010

Я думаю, что это может быть лучше обработано с помощью хранимой процедуры, которую вы используете для вставок. Кроме того, трудно сказать лучший подход без некоторого понимания того, какого рода данные хранятся в таблице. Я подозреваю, что вы сможете получить более четкую модель, разделив ColumnB на другую таблицу.

1 голос
/ 16 февраля 2010

Рассматривали ли вы вместо вычисляемый столбец ? Это не совсем то же самое ... но, может быть, вам этого достаточно?

1 голос
/ 16 февраля 2010

Единственное не триггерное средство, о котором я могу думать, - это иметь логику в хранимой процедуре. Это все еще мое предпочтение по сравнению с триггером, потому что это наиболее вероятное место для проверки. Триггер означает, что теперь у вас есть два места, чтобы проверить, когда возникают ошибки / проблемы.

Кроме того, это зависит от использования - могут ли в обозримом будущем появиться записи, на которые не должна влиять логика триггера? Если нет, то триггер является более централизованным средством решения проблемы.

0 голосов
/ 07 августа 2017

другой способ:

alter table yourTABLe add ColumnB as case when coalesce(ColumnA,0) = 15 then 0 else 1 end
go
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...