68

次の行で作成された計算列があります。

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ステートメントに別の条件を入力しようとしていますが、機能していません。

どうもありがとう!

4

4 に答える 4

94

このようなもの:

ALTER TABLE dbo.MyTable
DROP COLUMN OldComputedColumn

ALTER TABLE dbo.MyTable
ADD OldComputedColumn AS OtherColumn + 10

ソース

于 2012-10-01T19:52:08.047 に答える
79

既存の列を変更しようとしている場合は、ADDを使用できません。代わりに、これを試してください:

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))

編集:上記は正しくありません。計算列を変更する場合、実行できるのは、列を削除して再度追加することだけです。

于 2010-03-03T15:49:48.287 に答える
4

これは、SQL Server Management Studioのダイアグラム機能を使用するだけで簡単かつ迅速に処理できる状況の 1 つです。

  1. 新しいダイアグラムを作成し、テーブルを追加して、ダイアグラムのテーブル ビューに数式列を表示することを選択します。
  2. 列の数式を空の文字列('')または同様に無害なものに変更します (おそらく、列のデータ型を変更しないようにします)。
  3. ダイアグラムを保存します (テーブルを保存する必要があります)。
  4. 機能を変更します。
  5. 関数をその列の式に戻します。
  6. もう一度保存します。

SSMS でこの方法を実行すると、テーブル内の列の順序が保持されますが、これは単純drop...addには保証されません。これは一部の人にとって重要かもしれません。

于 2016-03-24T19:51:30.390 に答える