4

私はこのようなテーブルを持っています

タブ1

create table tab1(ID int identity(1,1), Type varchar(10),IsValued bit)

タブ1:

ID Type IsValued
----------------
1   S   1
2   R   0
3   R   0
4   S   1
5   S   1
6   R   0
7   S   1

IsValued 列に値を挿入する代わりに、Type ='S' の場合、IsValued を 1 として挿入し、Type ='R' の場合、IsValued を 0 として挿入する必要がある場合は、1 つの制約 (NOT TRIGGER) を作成します。

お気に入り :IsValued = case when Type ='S' then 1 when Type ='R' then 0 end

どうすればこれを達成できますか..

4

1 に答える 1

4

計算列が必要です。例えば:

CREATE TABLE tab1
(
 ID INT IDENTITY(1,1)
,[Type] VARCHAR(10)
,IsValued AS CASE [Type] WHEN 'S' THEN 1
                         WHEN 'R' THEN 0
             END
)

次の構文を使用して、既存のテーブルに追加できます。

ALTER TABLE dbo.tab1 ADD IsValued AS CASE [Type] WHEN 'S' THEN 1
                                                 WHEN 'R' THEN 0
                                     END

PERSISTED列の作成後にキーワードを追加することで、列を永続化できます。列を永続化するということは、フィールドがディスクに格納されることを意味します。レコードを挿入または更新すると、SQL サーバーはその時点で値を計算します。そうしないと、行にアクセスするたびに SQL Server が解決する必要があります。SQL Server 2005 Computed Column Is Persistedに適切な説明があります。

ALTER TABLE dbo.tab1 ADD IsValued AS CASE [Type] WHEN 'S' THEN 1
                                                 WHEN 'R' THEN 0
                                     END PERSISTED
于 2013-03-20T11:01:52.237 に答える