SQL - как ALTER COLUMN на вычисленном столбце
Я работаю с SQL Server 2008. Возможно ли изменить вычисленный столбец, не опуская колонку, а затем добавив ее снова (что я могу получить для работы)? Например, у меня есть эта таблица:
CREATE TABLE [dbo].[Prices](
[Price] [numeric](8,3) NOT NULL,
[AdjPrice] AS [Price] / [AdjFactor],
[AdjFactor] [numeric](8,3) NOT NULL)
Позже поняв, что у меня есть потенциальное деление на нулевую ошибку, я хочу изменить столбец [Adjprice], чтобы обработать это, но если я просто удалю столбец и добавлю его снова, я потеряю порядок столбцов.
Я хочу сделать что-то вроде:
ALTER TABLE dbo.[Prices]
ALTER COLUMN [AdjPrice] AS (CASE WHEN [AdjFactor] = 0 THEN 0 ELSE [Price] / [AdjFactor] END)
Но это неверно. Если это возможно, или есть другое решение, я был бы признателен за помощь.
Ответы
Ответ 1
К сожалению, вы не можете сделать это, не отбросив сначала столбец.
Из MSDN:
ALTER COLUMN
Указывает, что именованный столбец должен быть изменен или изменен. ALTER COLUMN не допускается, если уровень совместимости равен 65 или ниже. Для получения дополнительной информации см. Sp_dbcmptlevel (Transact-SQL).
Ответ 2
НЕТ
если он вычисляется, что это значительная сделка, сбросив его и добавив снова? это PERSISTED и есть миллионы строк?
Ответ 3
Я не думаю, что вы можете изменить эту колонку, не отбрасывая ее.
Итак, отбросьте colum, а затем добавьте новый столбец.
Если вы узнаете какой-либо другой способ сделать это, скажите мне.
Ответ 4
если вы должны сохранить заказ, скопировать данные в дублируемую таблицу, затем перестроить таблицу, чтобы сохранить порядок столбцов, а затем скопировать данные из дублированной таблицы.
Просто не забудьте сделать это, когда активность не будет продолжаться.
Ответ 5
его легко преодолеть деление на нулевую ошибку
использование
SELECT
( 100 / NULLIF( 0, 0 ) ) AS value
он вернет нуль, если 0 находится в этом столбце,
вместо изменения перейти для обновления, используя приведенный выше пример
Также прочитайте третью нормализацию для вычисленного столбца