Как я могу изменить этот вычисляемый столбец в SQL Server 2008? - PullRequest
47 голосов
/ 03 марта 2010

У меня есть вычисляемый столбец, созданный со следующей строкой:

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, но оно не работает.

Большое спасибо!

Ответы [ 4 ]

65 голосов
/ 01 октября 2012

Примерно так:

ALTER TABLE dbo.MyTable
DROP COLUMN OldComputedColumn

ALTER TABLE dbo.MyTable
ADD OldComputedColumn AS OtherColumn + 10

Источник

64 голосов
/ 03 марта 2010

Если вы пытаетесь изменить существующий столбец, вы не можете использовать ADD. Вместо этого попробуйте это:

изменить таблицу tbPedidos изменить ограничения столбца как (приведение (случай, когда limitaoLicenca = 1 или limitaoLote = 1 или limitaoValor = 1 тогда 1 еще 0 заканчивается как бит))

РЕДАКТИРОВАТЬ: Выше неверно . При изменении вычисляемого столбца единственное, что вы можете сделать, это сбросить его и добавить заново.

3 голосов
/ 24 марта 2016

Это одна из тех ситуаций, когда проще и быстрее использовать функцию схема в SQL Server Management Studio.

  1. Создайте новую диаграмму, добавьте свою таблицу и выберите отображение столбца формулы в табличном представлении диаграммы.
  2. Измените формулу столбца на пустую строку ('') или что-то такое же безобидное (возможно, такое, что вы не измените тип данных столбца).
  3. Сохранить диаграмму (которая должна сохранить таблицу).
  4. Измените свою функцию.
  5. Поместите функцию обратно в формулу для этого столбца.
  6. Сохраните еще раз.

Выполнение этого в SSMS сохранит порядок столбцов в вашей таблице, что не гарантируется простым drop...add. Это может быть важно для некоторых.

0 голосов
/ 17 апреля 2014

Как правильно сказал Майкл Тодд в свой ответ

При изменении вычисляемого столбца единственное, что вы можете сделать, - это отбросить его и снова добавить.

Просто нужно было сделать это самому, хотя я хотел сохранить существующие данные (как это делает 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
...