web-dev-qa-db-ja.com

SQL Server 2008でこの計算列を変更するにはどうすればよいですか?

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

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

どうもありがとう!

52
AndreMiranda

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

alter table tbPedidos alter column restricoes as(キャスト(restricaoLicenca = 1またはrestricaoLote = 1またはrestricaoValor = 1 then 1 else 0がビットとして終了する場合))

編集:上記は不正解です。 計算済み列を変更する場合、canができることは、それをドロップして再度追加することだけです。

66
Michael Todd

このようなもの:

ALTER TABLE dbo.MyTable
DROP COLUMN OldComputedColumn

ALTER TABLE dbo.MyTable
ADD OldComputedColumn AS OtherColumn + 10

ソース

67

これは、SQL Server Management Studioの diagram 機能を使用する方が簡単で高速な状況の1つです。

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

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

3
Tim Lehner