web-dev-qa-db-ja.com

SQL Serverの既存のテーブルに既定値の列を追加します。

SQL Server 2000 / SQL Server 2005 の既存のテーブルにデフォルト値の列を追加するにはどうすればよいですか。

2439
Mathias

構文:

ALTER TABLE {TABLENAME} 
ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL} 
CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}
WITH VALUES

例:

ALTER TABLE SomeTable
        ADD SomeCol Bit NULL --Or NOT NULL.
 CONSTRAINT D_SomeTable_SomeCol --When Omitted a Default-Constraint Name is autogenerated.
    DEFAULT (0)--Optional Default-Constraint.
WITH VALUES --Add if Column is Nullable and you want the Default Value for Existing Records.

ノート:

オプションの制約名:
CONSTRAINT D_SomeTable_SomeColを省略すると、SQL Serverは自動生成します
次のようなおかしな名前のDefault-Contraint:DF__SomeTa__SomeC__4FB7FEF6

オプションのWith-Valuesステートメント:
WITH VALUESは、列がNULL可能の場合にのみ必要です。
で、既存のレコードにはデフォルト値を使用します。
あなたのコラムがNOT NULLであれば、それは自動的にデフォルト値を使います。
WITH VALUESを指定してもしなくても、すべての既存レコードに対して。

インサートがデフォルト制約でどのように機能するか -
SomeTableにRecordを挿入し、not/ SomeColの値を指定すると、デフォルトは0になります。
Recordを挿入した場合andSomeColの値をNULLとして指定します(そして、カラムでnullを許可します)、
すると、Default-Constraintがnotになり、ValueとしてNULLが挿入されます。

メモは下記のみんなのすばらしいフィードバックに基づいていました。
特別な感謝:
コメントのための@Yatrix、@WalterStabosz、@ YahooSerious、および@StackMan。

3111
James Boother
ALTER TABLE Protocols
ADD ProtocolTypeID int NOT NULL DEFAULT(1)
GO

_ default _ を含めると、 existing rowsの列がデフォルト値で埋められるため、NOT NULL制約に違反することはありません。 

903
dbugger

NULL可能列 を追加するとき、WITH VALUESは、特定のDEFAULT値が既存の行に適用されるようにします。

ALTER TABLE table
ADD column BIT     -- Demonstration with NULL-able column added
CONSTRAINT Constraint_name DEFAULT 0 WITH VALUES
207
phunk_munkie
ALTER TABLE <table name> 
ADD <new column name> <data type> NOT NULL
GO
ALTER TABLE <table name> 
ADD CONSTRAINT <constraint name> DEFAULT <default value> FOR <new column name>
GO
122
ddc0660
ALTER TABLE MYTABLE ADD MYNEWCOLUMN VARCHAR(200) DEFAULT 'SNUGGLES'
111
Evan V

追加している列にNOT NULL制約があるのに、DEFAULT制約(値)がない場合には注意してください。その場合、テーブルに行が含まれていると、ALTER TABLEステートメントは失敗します。解決策は、新しい列からNOT NULL制約を削除するか、それにDEFAULT制約を指定することです。

89
jalbert

2行のみの最も基本的なバージョン

ALTER TABLE MyTable
ADD MyNewColumn INT NOT NULL DEFAULT 0
86
adeel41

つかいます:

-- Add a column with a default DateTime  
-- to capture when each record is added.

ALTER TABLE myTableName  
ADD RecordAddedDate smalldatetime NULL DEFAULT(GetDate())  
GO 
69
JerryOL

複数の列を追加したい場合は、次のようにしてそれを実行できます。

ALTER TABLE YourTable
    ADD Column1 INT NOT NULL DEFAULT 0,
        Column2 INT NOT NULL DEFAULT 1,
        Column3 VARCHAR(50) DEFAULT 'Hello'
GO
62
Gabriel L.

SQL Server 2008-R2では、テストデータベースでデザインモードに入り、デザイナーを使用して2つの列を追加し、GUIを使用して設定を行います。 Right-Click オプション "変更スクリプトの生成"を指定します。

Bang upは小さなウィンドウをポップアップ表示します、あなたはそれを推測しました、それは正しくフォーマットされた仕事に対して保証された変更スクリプトです。簡単ボタンを押してください。

48
Jack

つかいます:

ALTER TABLE {TABLENAME} 
ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL} 
CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}

参照: ALTER TABLE(Transact-SQL) (MSDN)

46
giá vàng

次のようにしてT-SQLでそのことができます。

 ALTER TABLE {TABLENAME}
 ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL}
 CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}

SQL Server Management Studio を使用することもできます。[デザイン]メニューの[テーブル]を右クリックして、デフォルト値を[テーブル]に設定することもできます。

さらに、データベース内のすべてのテーブルに同じ列を追加したい場合(存在しない場合)は、次のようにします。

 USE AdventureWorks;
 EXEC sp_msforeachtable
'PRINT ''ALTER TABLE ? ADD Date_Created DATETIME DEFAULT GETDATE();''' ;
43
gngolakia

別の方法として、明示的に制約を指定せずにデフォルトを追加することもできます。

ALTER TABLE [schema].[tablename] ADD  DEFAULT ((0)) FOR [columnname]

この制約を作成するときに既存のデフォルト制約に問題がある場合は、次の方法でそれらを削除できます。

alter table [schema].[tablename] drop constraint [constraintname]
41
Christo

デフォルト値を使用して既存のデータベーステーブルに列を追加するには、次のようにします。

ALTER TABLE [dbo.table_name]
    ADD [Column_Name] BIT NOT NULL
Default ( 0 )

これは、デフォルト値で既存のデータベーステーブルに列を追加するもう1つの方法です。

デフォルト値で列を追加するためのもっと徹底的なSQLスクリプトは、追加する前に列が存在するかどうかをチェックし、制約をチェックインし、存在する場合は削除することを含みます。このスクリプトは制約にも名前を付けているので、私はNice命名規則(私はDF_が好きです)を持つことができ、そうでなければSQLはランダムに生成された番号を持つ名前を持つ制約を与えます。それで、制約にも名前を付けることができてうれしいです。

-------------------------------------------------------------------------
-- Drop COLUMN
-- Name of Column: Column_EmployeeName
-- Name of Table: table_Emplyee
--------------------------------------------------------------------------
IF EXISTS (
            SELECT 1
            FROM INFORMATION_SCHEMA.COLUMNS
            WHERE TABLE_NAME = 'table_Emplyee'
              AND COLUMN_NAME = 'Column_EmployeeName'
           )
    BEGIN

        IF EXISTS ( SELECT 1
                    FROM sys.default_constraints
                    WHERE object_id = OBJECT_ID('[dbo].[DF_table_Emplyee_Column_EmployeeName]')
                      AND parent_object_id = OBJECT_ID('[dbo].[table_Emplyee]')
                  )
            BEGIN
                ------  DROP Contraint

                ALTER TABLE [dbo].[table_Emplyee] DROP CONSTRAINT [DF_table_Emplyee_Column_EmployeeName]
            PRINT '[DF_table_Emplyee_Column_EmployeeName] was dropped'
            END
     --    -----   DROP Column   -----------------------------------------------------------------
        ALTER TABLE [dbo].table_Emplyee
            DROP COLUMN Column_EmployeeName
        PRINT 'Column Column_EmployeeName in images table was dropped'
    END

--------------------------------------------------------------------------
-- ADD  COLUMN Column_EmployeeName IN table_Emplyee table
--------------------------------------------------------------------------
IF NOT EXISTS (
                SELECT 1
                FROM INFORMATION_SCHEMA.COLUMNS
                WHERE TABLE_NAME = 'table_Emplyee'
                  AND COLUMN_NAME = 'Column_EmployeeName'
               )
    BEGIN
    ----- ADD Column & Contraint
        ALTER TABLE dbo.table_Emplyee
            ADD Column_EmployeeName BIT   NOT NULL
            CONSTRAINT [DF_table_Emplyee_Column_EmployeeName]  DEFAULT (0)
        PRINT 'Column [DF_table_Emplyee_Column_EmployeeName] in table_Emplyee table was Added'
        PRINT 'Contraint [DF_table_Emplyee_Column_EmployeeName] was Added'
     END

GO

デフォルト値を使用して既存のデータベーステーブルに列を追加する方法は2つあります。

40
Catto
ALTER TABLE ADD ColumnName {Column_Type} Constraint

MSDNの記事ALTER TABLE(Transact-SQL)には、すべてのALTER TABLE構文があります。

34
Benjamin Autin

これはSSMS GUIでもすることができます。以下にデフォルトの日付を示しますが、デフォルトの値はもちろん何でもかまいません。

  1. テーブルをデザインビューにします(オブジェクトエクスプローラ - >デザインにあるテーブルを右クリックします)。
  2. テーブルに列を追加します(または列が既に存在する場合は、更新する列をクリックします)
  3. 以下の[列のプロパティ]で、(getdate())abc0、または下の図のように デフォルト値またはバインド フィールドに任意の値を入力します。

enter image description here

29
Tony L.

例:

ALTER TABLE [Employees] ADD Seniority int not null default 0 GO
27
andy

例:

ALTER TABLE tes 
ADD ssd  NUMBER   DEFAULT '0';
21
Mohit Tamrakar

最初にstudentという名前のテーブルを作成します。

CREATE TABLE STUDENT (STUDENT_ID INT NOT NULL)

列を1つ追加します。

ALTER TABLE STUDENT 
ADD STUDENT_NAME INT NOT NULL DEFAULT(0)

SELECT * 
FROM STUDENT

テーブルが作成され、デフォルト値で既存のテーブルに列が追加されます。

Image 1

17
Laxmi

SQL Server +テーブルの変更+列の追加+デフォルト値uniqueidentifier 

ALTER TABLE Product 
ADD ReferenceID uniqueidentifier not null 
default (cast(cast(0 as binary) as uniqueidentifier))
16
Naveen Desosha

これを試して

ALTER TABLE Product
ADD ProductID INT NOT NULL DEFAULT(1)
GO
15
Jakir Hossain
IF NOT EXISTS (
    SELECT * FROM INFORMATION_SCHEMA.COLUMNS
    WHERE TABLE_NAME ='TABLENAME' AND COLUMN_NAME = 'COLUMNNAME'
)
BEGIN
    ALTER TABLE TABLENAME ADD COLUMNNAME Nvarchar(MAX) Not Null default
END
14
Jeevan Gharti

これにはたくさんの答えがありますが、私はこの拡張メソッドを追加する必要があると感じます。これはかなり長いように思えますが、アクティブなデータベースに何百万もの行があるテーブルにNOT NULLフィールドを追加している場合は非常に便利です。

ALTER TABLE {schemaName}.{tableName}
    ADD {columnName} {datatype} NULL
    CONSTRAINT {constraintName} DEFAULT {DefaultValue}

UPDATE {schemaName}.{tableName}
    SET {columnName} = {DefaultValue}
    WHERE {columName} IS NULL

ALTER TABLE {schemaName}.{tableName}
    ALTER COLUMN {columnName} {datatype} NOT NULL

これを行うのは、列をNULL可能フィールドとして追加し、デフォルト値を使用してすべてのフィールドをデフォルト値に更新し(または、より意味のある値を割り当てることができます)、最後に列をNOT NULLに変更します。

これは、大規模なテーブルを更新し、新しいnullでないフィールドをすべての単一行に書き込まなければならないためです。これにより、列を追加してすべての値を書き込むときにテーブル全体がロックアウトされます。

このメソッドは、それ自体ではるかに速く動作するNULL可能列を追加してから、NOT NULL状況を設定する前にデータを埋めます。

1つのステートメントですべてのことを実行すると、4〜8分間、アクティブなテーブルの1つがロックアウトされることがわかりました。このプロセスを強制終了することがよくありました。この方法では、各部分は通常数秒しかかからず、ロックは最小限で済みます。

さらに、数十億行の領域にテーブルがある場合は、次のように更新をバッチ処理する価値があります。

WHILE 1=1
BEGIN
    UPDATE TOP (1000000) {schemaName}.{tableName}
        SET {columnName} = {DefaultValue}
        WHERE {columName} IS NULL

    IF @@ROWCOUNT < 1000000
        BREAK;
END
13
Ste Bov
--Adding Value with Default Value
ALTER TABLE TestTable
ADD ThirdCol INT NOT NULL DEFAULT(0)
GO
12
wild coder

テーブルに新しい列を追加します。

ALTER TABLE [table]
ADD Column1 Datatype

例えば、

ALTER TABLE [test]
ADD ID Int

ユーザーが自動インクリメントさせたい場合は、次のようにします。

ALTER TABLE [test]
ADD ID Int IDENTITY(1,1) NOT NULL
10
Chirag Thakar

これは以下のコードで実行できます。

CREATE TABLE TestTable
    (FirstCol INT NOT NULL)
    GO
    ------------------------------
    -- Option 1
    ------------------------------
    -- Adding New Column
    ALTER TABLE TestTable
    ADD SecondCol INT
    GO
    -- Updating it with Default
    UPDATE TestTable
    SET SecondCol = 0
    GO
    -- Alter
    ALTER TABLE TestTable
    ALTER COLUMN SecondCol INT NOT NULL
    GO
9
Mohit Dagar

さて、私は今私の前の答えに若干の修正を加えました。 IF NOT EXISTSについて言及されている答えがないことに気づきました。だから私はテーブルを変更するいくつかの問題に直面しているので私はそれの新しい解決策を提供するつもりです。

IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.columns WHERE table_name = 'TaskSheet' AND column_name = 'IsBilledToClient')
BEGIN
ALTER TABLE dbo.TaskSheet ADD
 IsBilledToClient bit NOT NULL DEFAULT ((1))
END
GO

ここでTaskSheetは特定のテーブル名、IsBilledToClientは挿入しようとしている新しい列、そして1はデフォルト値です。つまり、新しい列には既存の行の値が入ります。したがって、そこに自動的に設定されます。ただし、BITを使用したように、列タイプを考慮して必要に応じて変更することができるので、デフォルト値1を使用します。

私は問題に直面しているので、私は上記のシステムを提案します。それで問題は何ですか?問題は、IsBilledToClient列がテーブルtableに存在する場合、以下に示すコードの一部だけを実行すると、SQLサーバーのQuery Builderでエラーが発生することです。しかし、それが存在しない場合は、実行時に初めてエラーが発生することはありません。

ALTER TABLE {TABLENAME}
ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL}
CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}
[WITH VALUES]
8
gdmanandamohon
ALTER TABLE tbl_table ADD int_column int NOT NULL DEFAULT(0)

このクエリから、デフォルト値0のデータ型integerの列を追加できます。

8
Sandeep Kumar

デフォルトがNullの場合、次のようになります。

  1. SQL Serverで、ターゲットテーブルのツリーを開きます。
  2. 「列」を右クリック==> New Column
  3. 列Name、Select Typeを入力し、Allow Nullsチェックボックスにチェックを入れ
  4. メニューバーからSaveをクリックします

完了しました。

7
usefulBee

あなたはこのクエリを使用することができます:

ALTER TABLE tableName ADD ColumnName datatype DEFAULT DefaultValue;
6
Arun D

SQL Server +テーブルの変更+列の追加+デフォルト値uniqueidentifier ...

ALTER TABLE [TABLENAME] ADD MyNewColumn INT not null default 0 GO
6
Chanukya

テーブルを右クリックし、最後の列名の下をクリックして、列情報を入力します。

次に、デフォルト値またはバインディングを追加します。文字列の場合は '1'、整数値の場合は1です。

5

これはSQL Server用です。

ALTER TABLE TableName
ADD ColumnName (type) -- NULL OR NOT NULL
DEFAULT (default value)
WITH VALUES

例:

ALTER TABLE Activities
ADD status int NOT NULL DEFAULT (0)
WITH VALUES

制約を追加したい場合は:

ALTER TABLE Table_1
ADD row3 int NOT NULL
CONSTRAINT CONSTRAINT_NAME DEFAULT (0)
WITH VALUES
4
Akhil Singh

ステップ1。最初にフィールドを追加してテーブルを変更する必要があります

alter table table_name add field field_name data_type

step-2 CREATE DEFAULT

USE data_base_name;
GO
CREATE DEFAULT default_name AS 'default_value';

step-3あなたはこの手順を実行する必要があります

exec sp_bindefault 'default_name' , 'schema_name.table_name.field_name'

例 -

USE master;
GO
EXEC sp_bindefault 'today', 'HumanResources.Employee.HireDate';
4
raju chowrsiya
--Adding New Column with Default Value
ALTER TABLE TABLENAME 
ADD COLUMNNAME DATATYPE NULL|NOT NULL DEFAULT (DEFAULT_VALUE)

OR

--Adding CONSTRAINT And Set Default Value on Column
ALTER TABLE TABLENAME ADD  CONSTRAINT [CONSTRAINT_Name]  DEFAULT 
(DEFAULT_VALUE) FOR [COLUMNNAME]
3
Erfan Mohammadi
ALTER TABLE Table1 ADD Col3 INT NOT NULL DEFAULT(0)
3

以下のクエリを試してください。

ALTER TABLE MyTable
ADD MyNewColumn DataType DEFAULT DefaultValue

これでTableに新しい列が追加されます。

1
Anshul Dubey