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 находится в этом столбце,
вместо изменения перейти на обновление, используя приведенный выше пример
Также прочитайте третью нормализацию для вычисленного столбца