SQL - Как изменить столбец на вычисляемом столбце - PullRequest
14 голосов
/ 16 февраля 2010

Я работаю с 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)

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

Ответы [ 5 ]

19 голосов
/ 16 февраля 2010

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

От MSDN :

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

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

    • Вычисляемый столбец или используемый в вычисляемом столбце.
0 голосов
/ 20 июня 2013

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

Только убедитесь, что делаете это, когда нет никакой активности.

0 голосов
/ 16 апреля 2011

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

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

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

вернет ноль, если 0 в этом столбце,

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

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

0 голосов
/ 16 февраля 2010

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

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

0 голосов
/ 16 февраля 2010

NO

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...