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) 

Но это неверно. Если это возможно, или есть другое решение, я был бы признателен за помощь.

К сожалению, вы не можете сделать это, не отбросив сначала столбец.

Из MSDN :

ALTER COLUMN
Указывает, что именованный столбец должен быть изменен или изменен. ALTER COLUMN не допускается, если уровень совместимости равен 65 или ниже. Для получения дополнительной информации см. Sp_dbcmptlevel (Transact-SQL).

  • Измененный столбец не может быть любым из следующих:

    • Вычисленный столбец или используется в вычисленном столбце.

НЕТ

если он вычисляется, то какое большое дело его понижает и добавляет снова? это PERSISTED и есть миллион строк?

Я не думаю, что вы можете изменить эту колонку без капли. Итак, опустите колону, а затем добавьте новый столбец.

Если вы узнаете какой-либо другой способ сделать это, скажите мне.

если вы должны поддерживать порядок, скопируйте данные в дублируемую таблицу, затем перестройте таблицу, чтобы сохранить порядок столбцов, а затем скопируйте данные из дублированной таблицы.

Просто обязательно сделайте это, когда активность не будет продолжаться.

его легко преодолеть деление на нулевую ошибку

использование

 SELECT ( 100 / NULLIF( 0, 0 ) ) AS value 

он вернет нуль, если 0 находится в этом столбце,

вместо изменения перейти на обновление, используя приведенный выше пример

Также прочитайте третью нормализацию для вычисленного столбца

Давайте будем гением компьютера.