110

既存の列の値と等しい既定値を持つ列を SQL Server テーブルに追加する方法は?

このT-SQLステートメントを試しました:

ALTER TABLE tablename 
ADD newcolumn type NOT NULL DEFAULT (oldcolumn) 

しかし、それはエラーを出しています:

このコンテキストでは、「oldcolumn」という名前は使用できません。有効な式は、定数、定数式、および (一部のコンテキストでは) 変数です。列名は許可されていません。

4

8 に答える 8

87

これを試して:

ALTER TABLE tablename ADD newcolumn type NOT NULL DEFAULT (0)
Go
Update tablename SET newcolumn = oldcolumn Where newcolumn = 0
Go
于 2012-11-06T11:25:56.130 に答える
17

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 列の場合は機能しません。

于 2014-09-09T09:19:13.283 に答える
15

私はそれらがあまり好きではありませんが、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   
于 2012-11-06T11:40:37.367 に答える
3

計算列を使用して、既存の列の値に基づいてテーブルに新しい列を挿入できます

ALTER TABLE dbo.TableName ADD NewColumn AS (OldColumn) PERSISTED;

または、既存の列の値に基づいて値を変更する場合は、次を使用します

ALTER TABLE dbo.TableName ADD NewColumn AS (OldColumn * 1.5) PERSISTED;
于 2019-07-26T17:01:40.290 に答える
0

IDENTITY列の値でも機能する計算列を使用します。

CREATE TABLE #This
( Id        INT IDENTITY(1,1)
 ,MyName    VARCHAR(10)
 ,FullName  AS (Myname + CONVERT(VARCHAR(10),Id)) PERSISTED);

INSERT #This VALUES ('Item'),('Item');

SELECT * FROM #This;

DROP TABLE #This;

次の結果が得られます。

グリッドとしての結果

于 2021-05-21T15:42:12.073 に答える