Как я могу изменить этот вычисляемый столбец в SQL Server 2008?

#sql #sql-server #datatable

Вопрос:

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

 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. Что не работает? Вы получаете сообщение об ошибке? Разве это не делает того, чего вы ожидаете? Если да, то чего вы ожидаете?


Ответ №1:

Что-то вроде этого:

 ALTER TABLE dbo.MyTable
DROP COLUMN OldComputedColumn

ALTER TABLE dbo.MyTable
ADD OldComputedColumn AS OtherColumn   10
 

Источник

Ответ №2:

Если вы пытаетесь изменить существующий столбец, вы не можете использовать команду ДОБАВИТЬ. Вместо этого попробуйте это:

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

ПРАВКА: Вышесказанное неверно. При изменении вычисляемого столбца единственное, что вы можете сделать,-это удалить его и добавить заново.

Ответ №3:

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

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

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

Комментарии:

1. Это полезное решение. Я хочу уточнить, что при работе с очень большими таблицами, от миллионов до миллиардов строк, это приведет к перестройке таблицы. Это может занять несколько часов, в зависимости от ширины таблицы и типов хранимых данных (например, МАКСИМУМ). Чтобы избежать перестройки таблицы, необходимо удалить и добавить; при условии, что все SQL-запросы к таблице не выполняются с запросами, для которых определен точный порядок полей (т. Е. ВСТАВИТЬ В, без имен полей)

Ответ №4:

Еще одна вещь, которая может быть кому-то полезна, — это как изменить функцию, которая является вычисляемым столбцом в таблице (следующий запрос предназначен для SQL).:

 ALTER <table>
DROP COLUMN <column>

ALTER FUNCTION <function>
(
<parameters>
)
RETURNS <type>
BEGIN
...
END

ALTER <table>
ADD <column> as dbo.<function>(parameters)
 

Примечания:

  1. Параметрами могут быть другие столбцы из таблицы
  2. Возможно, вы не сможете выполнить все эти запросы сразу, у меня были проблемы с этим. Запускайте их по одному за раз
  3. SQL автоматически заполняет вычисляемые столбцы, поэтому удаление и добавление не повлияют на данные (я об этом не знал).