Возможно ли иметь столбец в таблице (не из представления) (SQL SERVER 2008) для изменения в соответствии со значением в другом столбце, то есть, если у меня есть столбец с именем «DUEDATE», я могу есть столбец под названием «STATUS», который изменит статус на «Now Due», если «DUEDATE» -> GetDate()? Если да, то как вы добавляете это в таблицу?Использование оператора CASE в таблице
0
A
ответ
0
Да, вы можете создать вычисляемый столбец:
CREATE TABLE [dbo].[SampleTable](
[DueDate] [date] NULL,
[ComputedValue] AS (CASE WHEN [Duedate] > GETDATE() THEN 'Now Due' ELSE '' END)
) ON [PRIMARY]
Как это недетерминирована столбец (из-за стоимости GETDATE()
, который отличается каждый раз, когда вы используете таблицу), добавив его к таблица не дает вам большой пользы от того, чтобы вернуть то же самое в выбранном запросе.
0
Вы можете изменить таблицу и добавить вычисляемый столбец:
ALTER TABLE dbo.TheTable
ADD Status AS CASE WHEN ...
Вы не можете сохраняться, потому что это не детерминированным, поэтому не добавляйте PERSISTED или попытаться поставить индекс на нем.
С точки зрения индексирования не пытайтесь запросить его, используя WHERE Status = 'whatever', потому что ему придется рассматривать каждую строку в таблице. Вместо этого используйте индекс для DueDate и WHERE DueDate < = GETDATE()
Смежные вопросы
- 1. Использование оператора PLSQL CASE
- 2. Использование подзапроса Oracle для замены оператора CASE
- 3. Рефакторинг оператора case case
- 4. Использование оператора Case для обновления другой таблицы
- 5. Использование оператора case в функции кросс-таблицы
- 6. Использование простого оператора case в процедуре
- 7. Использование оператора case в контрольном ограничении
- 8. Использование метода в разделе case оператора switch
- 9. Использование оператора case в группе по
- 10. Использование суммы внутри оператора case в MySQL
- 11. Использование двух значений для одного оператора case case
- 12. Использование CASE для создания переменной оператора IN
- 13. Использование DatePart внутри оператора case switch
- 14. Использование переменной для оператора case switch
- 15. Использование оператора CASE внутри IN Раздел
- 16. Oracle - использование оператора case с подсчетом
- 17. Использование условного оператора (CASE) в инструкции WHERE в SQL
- 18. Вставьте внутри оператора case
- 19. SQL-обновление с использованием оператора case case
- 20. Выполнение оператора CASE из предыдущего оператора CASE для SQL Query
- 21. Запрос оператора case
- 22. Использование оператора Case в разделе значений в инструкции Insert
- 23. Ошибка синтаксиса оператора CASE
- 24. TODATETIMEOFFSET внутри оператора case
- 25. Создание оператора case в Hibernate
- 26. Замена оператора case в Verilog
- 27. ИЛИ оператора в PHP Case
- 28. Использование «как» внутри оператора «case» с двумя разными полями
- 29. Использование оператора case с циклом for в сценариях Bash Linux
- 30. Использование оператора case для удаления ISNULL в моем SQL-запросе
В лучшей практике мы не храним столбцы, которые могут быть получены из другого. – Miller
Я понимаю, но я создал представление, но это делает мой весь запрос настолько медленным, когда я добавляю таблицу LEFT JOINED с этим представлением. –
Зачем вам нужно добавить таблицу LEFT JOINED в представление? Просто создайте представление, содержащее все столбцы из базовой таблицы, и добавьте оператор CASE, как в моем ответе ниже. – Dan