Как изменить этот вычисленный столбец в SQL Server 2008?
У меня есть вычисляемый столбец, созданный со следующей строкой:
alter table tbPedidos
add restricoes as (cast(case when restricaoLicenca = 1 or restricaoLote = 1 then 1 else 0 end as bit))
Но теперь мне нужно изменить этот столбец для чего-то вроде:
alter table tbPedidos
alter column restricoes as (cast(case when restricaoLicenca = 1 or restricaoLote = 1 or restricaoValor = 1 then 1 else 0 end as bit))
Но он не работает. Я пытаюсь ввести другое условие в оператор case, но он не работает.
Спасибо большое!
Ответы
Ответ 1
Если вы пытаетесь изменить существующий столбец, вы не можете использовать ADD. Вместо этого попробуйте следующее:
изменить таблицу tbPedidos изменить колонку (литье (случай, когда restricaoLicenca = 1 или restricaoLote = 1 или restricaoValor = 1 затем 1 else 0 заканчивается как бит))
Забастовкa >
РЕДАКТОР: Вышеуказанное значение неверно. При изменении столбца вычисленный единственное, что вы можете сделать, это сбросить его и повторно добавить.
Ответ 2
Что-то вроде этого:
ALTER TABLE dbo.MyTable
DROP COLUMN OldComputedColumn
ALTER TABLE dbo.MyTable
ADD OldComputedColumn AS OtherColumn + 10
Источник
Ответ 3
Это одна из тех ситуаций, где проще и быстрее использовать функцию диаграмму в SQL Server Management Studio.
- Создайте новую диаграмму, добавьте таблицу и выберите отображение столбца формулы в представлении таблицы диаграмм.
- Измените формулу столбцов на пустую строку
('')
или что-то в равной степени безобидное (возможно, такое, что вы не измените тип данных столбца).
- Сохраните диаграмму (которая должна сохранить таблицу).
- Измените свою функцию.
- Верните функцию обратно в формулу для этого столбца.
- Сохранить еще раз.
Выполнение этого способа в SSMS сохранит упорядочение столбцов в вашей таблице, что простой drop...add
не гарантирует. Это может быть важно для некоторых.
Ответ 4
Как Майкл Тодд правильно заявляет в его ответ
При изменении вычисленного столбца единственное, что вы можете сделать, это сбросить его и снова добавить его.
Просто нужно было сделать это сам, хотя я хотел сохранить существующие данные (как это делает Management Studio при выполнении этой задачи через конструктор).
Мое решение состояло в том, чтобы хранить данные во временной таблице, а затем обновлять таблицу с сохраненными значениями после того, как я сбросил и воссоздал вычисленный столбец.
SELECT IDKey, Value
INTO #Temp
FROM MyTable
ALTER TABLE MyTable
DROP COLUMN Value
ALTER TABLE MyTable
ADD Value nvarchar(max) NULL
UPDATE MyTable
SET Value = #Temp.Value
FROM
MyTable
INNER JOIN #Temp ON #Temp.IDKey= MyTable.IDkey