既存の列の値と等しい既定値を持つ列を SQL Server テーブルに追加する方法は?
このT-SQLステートメントを試しました:
ALTER TABLE tablename
ADD newcolumn type NOT NULL DEFAULT (oldcolumn)
しかし、それはエラーを出しています:
このコンテキストでは、「oldcolumn」という名前は使用できません。有効な式は、定数、定数式、および (一部のコンテキストでは) 変数です。列名は許可されていません。
既存の列の値と等しい既定値を持つ列を SQL Server テーブルに追加する方法は?
このT-SQLステートメントを試しました:
ALTER TABLE tablename
ADD newcolumn type NOT NULL DEFAULT (oldcolumn)
しかし、それはエラーを出しています:
このコンテキストでは、「oldcolumn」という名前は使用できません。有効な式は、定数、定数式、および (一部のコンテキストでは) 変数です。列名は許可されていません。
これを試して:
ALTER TABLE tablename ADD newcolumn type NOT NULL DEFAULT (0)
Go
Update tablename SET newcolumn = oldcolumn Where newcolumn = 0
Go
AFTER INSERTトリガー アプローチには、余分なステートメントによるオーバーヘッドが伴いますUPDATE。次のように、トリガーを使用することをお勧めしINSTEAD OF INSERTます。
CREATE TRIGGER tablename_on_insert ON tablename
INSTEAD OF INSERT
AS
INSERT INTO tablename (oldcolumn, newcolumn)
SELECT oldcolumn, ISNULL(newcolumn, oldcolumn)
FROM inserted
oldcolumnただし、自動 ID 列の場合は機能しません。
私はそれらがあまり好きではありませんが、AFTER INSERTトリガーを使用してこれを行う方法は次のとおりです。
CREATE TRIGGER TableX_AfterInsert_TRG
ON TableX
AFTER INSERT
AS
UPDATE TableX AS t
SET t.newcolumn = t.oldcolumn
FROM Inserted AS i
WHERE t.PK = i.PK ; -- where PK is the PRIMARY KEY of the table
計算列を使用して、既存の列の値に基づいてテーブルに新しい列を挿入できます
ALTER TABLE dbo.TableName ADD NewColumn AS (OldColumn) PERSISTED;
または、既存の列の値に基づいて値を変更する場合は、次を使用します
ALTER TABLE dbo.TableName ADD NewColumn AS (OldColumn * 1.5) PERSISTED;