テーブルがあり、既存のデータがあり、 'IsOnlineUser'というnull値のないビット列を追加したい場合は、既存のすべての行をfalseに設定します。テーブル既存の値を持つ列を追加する更新を書き込む方法
は、私が試した最初のSQLが
SET @ColumnExists = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'Member' AND COLUMN_NAME = 'IsOnlineUser');
IF (@ColumnExists = 0)
BEGIN
ALTER TABLE Member ADD IsOnlineUser bit NULL;
UPDATE Member SET IsOnlineUser= 0;
ALTER TABLE Member ALTER COLUMN IsOnlineUser bit NOT NULL;
END
GO
だったしかし、それは私に
無効を与える場合、私は私が展開するたびに実行するスクリプトのセットを持っているので、私は見るために、チェックが必要列名「IsOnlineUser」
。
SET @ColumnExists = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'Member' AND COLUMN_NAME = 'IsOnlineUser');
IF (@ColumnExists = 0)
BEGIN
ALTER TABLE Member ADD IsOnlineUser bit NULL;
END
GO
IF (@ColumnExists = 0)
BEGIN
UPDATE Member SET IsOnlineUser= 0;
ALTER TABLE Member ALTER COLUMN IsOnlineUser bit NOT NULL;
END
GO
しかし、これは
を言う:UPDATEが作成した列を見つけることができないので、仮にこれが私は私は2つの文の間で「GO」を置けば、それはので、私は次のようでした役立つだろうと思っていますスカラー変数 "@ColumnExists"を宣言しなければなりません。
これはGOが2つの間のスカラ変数にアクセスするのを止めるためですと仮定します。
あなたは、デフォルトの制約にnot null
として列を追加することができます任意のヘルプははるかに
@ columnExists =(...を設定する必要はありません)後にもう一度?変数が継続して保持されないため、https://stackoverflow.com/questions/937336/is-there-a-way-to-persist-a-variable-across-a-go – xQbert
DECLARE @ColumnExists INT –