Подтвердить что ты не робот

Как изменить этот вычисленный столбец в 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, но он не работает.

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

4b9b3361

Ответ 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