sql server 2008でテーブルの列を追加する方法を教えてください。

ベイラム
2013-07-29 15:39 2469 2
sql server 2008でテーブルの列を追加する方法を教えてください。

また、NULL許容しない場合の初期値の設定方法などがあれば合わせてご指導ください。
sql server 2008 management studioを使っています。

列を追加しようとしましたが、変更の保存が許可されていない旨のメッセージが出て、出来ませんでした。

WEBで調べたところ、「テーブルの再作成を必要とする変更を保存できないようにする」のチェックボックスをONする方法が提案されていました。

これを実行したところ、今度は、「警告: 既存の列では ANSI_PADDING が 'OFF' に設定されています。新しい列は、ANSI_PADDING を 'ON' にして作成されます。」のメッセージが出てきました。

理解できなかったので、怖くなってメッセージをキャンセルしました。

普通はどうやって列を追加すればいいのでしょうか?

また、NULL許容しない場合の初期値はどうすれば設定できるかも、ご指導いただければ幸いです。

コメント

2013年 07月 30日 (11:09)
こんにちは。
イノ(inno)です。

該当テーブルを作成する時に ANSI_PADDING オプションを OFFにして作成したためです。
最初そのテーブルを作成した方が何かの理由があって作成したかも知れませんので、
正確に確認をせずに変更するのは危険があります。
そのメッセージをみて作業をキャンセールしたのは正しい判断です。

基本的にテーブルを作成するとANSI_PADDINGがONに設定されるようになっています。
なんだかの理由でOFFにして作成した可能性があります。

この状態で「デザイン」の画面でカラムを追加する場合
、「警告: 既存の列では ANSI_PADDING が 'OFF' に設定されています。新しい列は、ANSI_PADDING を 'ON' にして作成されます。」のメッセージが表示されます。
ここで「OK」を押すとそのテーブルのANSI_PADDINGの設定がONに設定されてしまい、
不具合が発生する可能性がありますので、
「デザイン」では作業をしないようにお願いします。

作業方法は下記のようにSQLを実行して追加します。

例文)
dbo.test テーブルにData1というカラムをvarchar(10), null許可しない、初期値はA という文字に設定する場合。

SET ANSI_PADDING OFF
GO

ALTER TABLE dbo.test
ADD Data1 varchar(10) not null CONSTRAINT [DF_test_Data1] DEFAULT ('A')
GO

上記のクエリの中で[DF_test_Data1]は[DF_テーブル名_カラム名]で設定するのが理想的です。


例文)
dbo.test テーブルにData2というカラムをint, null許可しない、初期値は0(数字) という文字に設定する場合。

SET ANSI_PADDING OFF
GO

ALTER TABLE dbo.test
ADD Data2 int not null CONSTRAINT [DF_test_Data2] DEFAULT (0)
GO

上記のように作業すれば解決できます。

ちなみに作業するテーブルのデータが多い場合、
反映されるまで時間がかかる場合がありますので、ご注意してください。

該当データベースをbackupしてテストサーバーでrestoreしてテストしてみることも一つの方法です。

もう一つ、質問の中で「テーブルの再作成を必要とする変更を保存できないようにする」をONではなくOFFすることで
「デザイン」画面から作業内容が保存などができます。
ベイラム 2013年 08月 01日 (23:52)
ありがとうございます
今までデザインでやると楽でしたが、素直にクエリを発行するようにします
大変勉強になりました