3061

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

4

43 に答える 43

3869

構文:

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.

ノート:

オプションの制約名:省略
した場合、SQLServer     は次のような面白い名前でデフォルト制約を自動生成しCONSTRAINT D_SomeTable_SomeColます。
DF__SomeTa__SomeC__4FB7FEF6

オプションのWith-Valuesステートメント:
これは、列がNull可能     であり、既存のレコードにデフォルト値を使用するWITH VALUES場合にのみ必要です。 列がの場合、     指定するかどうかに関係なく、すべての既存のレコードのデフォルト値が自動的に使用されます。

NOT NULL
WITH VALUES

挿入がデフォルト制約でどのように機能するか:
レコードをに挿入し、の値を指定SomeTableない場合、デフォルトはになります。 レコードを挿入し、の値をとして指定する場合および、列でnullを許可する     場合)、Default-Constraintは使用され、値として挿入されます。SomeCol0
SomeColNULL
NULL

メモは、以下の皆さんのすばらしいフィードバックに基づいています。     コメントを寄せてくれた@Yatrix、@ WalterStabosz、@ YahooSerious、@StackManに特に
感謝します。

于 2008-09-18T12:34:33.437 に答える
1115
ALTER TABLE Protocols
ADD ProtocolTypeID int NOT NULL DEFAULT(1)
GO

DEFAULTを含めると、既存の行の列がデフォルト値で埋められるため、NOTNULL制約に違反することはありません。

于 2008-09-18T12:31:48.387 に答える
266

null 許容列を追加WITH VALUESすると、特定の DEFAULT 値が既存の行に適用されるようになります。

ALTER TABLE table
ADD column BIT     -- Demonstration with NULL-able column added
CONSTRAINT Constraint_name DEFAULT 0 WITH VALUES
于 2011-04-12T17:40:44.833 に答える
153
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
于 2008-09-18T12:39:32.877 に答える
140
ALTER TABLE MYTABLE ADD MYNEWCOLUMN VARCHAR(200) DEFAULT 'SNUGGLES'
于 2012-08-05T03:28:21.523 に答える
113

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

ALTER TABLE MyTable
ADD MyNewColumn INT NOT NULL DEFAULT 0
于 2012-05-25T14:50:21.837 に答える
105

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

于 2008-09-24T16:03:25.137 に答える
94

使用する:

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

ALTER TABLE myTableName  
ADD RecordAddedDate SMALLDATETIME NULL DEFAULT (GETDATE())  
GO 
于 2010-12-09T17:45:15.897 に答える
90

複数の列を追加する場合は、たとえば次のようにします。

ALTER TABLE YourTable
    ADD Column1 INT NOT NULL DEFAULT 0,
        Column2 INT NOT NULL DEFAULT 1,
        Column3 VARCHAR(50) DEFAULT 'Hello'
GO
于 2014-10-14T18:38:41.273 に答える
60

使用する:

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

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

于 2011-12-27T02:44:40.633 に答える
60

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

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

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

デフォルト値で列を追加するためのはるかに完全な SQL スクリプトを以下に示します。列を追加する前に列が存在するかどうかをチェックし、制約をチェックインし、存在する場合はドロップします。このスクリプトは制約にも名前を付けるので、適切な命名規則を使用できます (私は 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 つの方法です。

于 2014-06-20T18:33:58.603 に答える
56

次の方法で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();''' ;
于 2011-11-27T11:39:59.060 に答える
55

In SQL Server 2008-R2, I go to the design mode - in a test database - and add my two columns using the designer and made the settings with the GUI, and then the infamous Right-Click gives the option "Generate Change Script"!

Bang up pops a little window with, you guessed it, the properly formatted guaranteed-to-work change script. Hit the easy button.

于 2011-12-01T00:19:06.657 に答える
53

または、制約に明示的に名前を付けることなく、デフォルトを追加できます。

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

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

alter table [schema].[tablename] drop constraint [constraintname]
于 2012-06-01T02:19:53.520 に答える
45
ALTER TABLE ADD ColumnName {Column_Type} Constraint

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

于 2008-09-18T12:31:01.120 に答える
36

例:

ALTER TABLE [Employees] ADD Seniority int not null default 0 GO
于 2014-03-05T13:37:20.943 に答える
25

例:

ALTER TABLE tes 
ADD ssd  NUMBER   DEFAULT '0';
于 2014-11-25T13:23:07.067 に答える
24

まず、student という名前のテーブルを作成します。

CREATE TABLE STUDENT (STUDENT_ID INT NOT NULL)

それに 1 つの列を追加します。

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

SELECT * 
FROM STUDENT

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

画像1

于 2016-10-20T04:17:29.097 に答える
20

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

ALTER TABLE Product 
ADD ReferenceID uniqueidentifier not null 
default (cast(cast(0 as binary) as uniqueidentifier))
于 2015-06-15T14:04:34.733 に答える
20
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
于 2016-04-26T05:46:59.383 に答える
16

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

ALTER TABLE [table]
ADD Column1 Datatype

例えば、

ALTER TABLE [test]
ADD ID Int

ユーザーがそれを自動インクリメントしたい場合:

ALTER TABLE [test]
ADD ID Int IDENTITY(1,1) NOT NULL
于 2015-12-22T10:52:03.997 に答える
12

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

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
于 2016-09-09T06:40:59.843 に答える
10
ALTER TABLE tbl_table ADD int_column int NOT NULL DEFAULT(0)

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

于 2016-05-24T11:20:56.783 に答える
8

デフォルトが Null の場合:

  1. SQL Server で、対象のテーブルのツリーを開きます
  2. 「列」を右クリック ==>New Column
  3. 列の名前を入力しSelect Type、[Null を許可] チェックボックスをオンにします。
  4. メニューバーから、Save

終わり!

于 2016-05-09T14:28:10.380 に答える
8

テーブル名を右クリックして [デザイン] をクリックし、最後の列名の下をクリックして、[列名]、[データ型]、[Null を許可] と入力します。

次に、ページの下部でデフォルト値またはバインディングを設定します。文字列の場合は「1」、int の場合は 1 などです。

于 2017-05-09T12:14:24.650 に答える
5

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

ALTER TABLE [TABLENAME] ADD MyNewColumn INT not null default 0 GO
于 2015-12-07T10:44:35.230 に答える
4
ALTER TABLE Table1 ADD Col3 INT NOT NULL DEFAULT(0)
于 2018-02-13T07:05:51.180 に答える
3

OFFLINEまた、ONLINEMySQL Cluster テーブルで実行される ALTER テーブルの方法に関連しています。MySQL Cluster は、MySQL NDB Cluster 7.3 以降で ALGORITHM=INPLACE 構文を使用したオンライン ALTER TABLE 操作をサポートしています。MySQL Cluster は、ONLINE および OFFLINE キーワードを使用する NDB に固有の古い構文もサポートしています。これらのキーワードは、MySQL NDB Cluster 7.3 以降では非推奨です。それらは MySQL NDB Cluster 7.4 で引き続きサポートされますが、MySQL Cluster の将来のバージョンでは削除される可能性があります。

IGNOREALTER ステートメントが、制約 UNIQUE を新しく追加した列の重複値をどのように処理するかに関係します。IGNORE が指定されていない場合、ALTER は失敗し、適用されません。IGNORE が指定されている場合、すべての重複行の最初の行が保持され、リセットが削除され、ALTER が適用されます。

それALTER_SPECIFICATIONはあなたが変えようとしているものです。追加、削除、または変更する列またはインデックス、または列に適用する制約。

ALTER [ONLINE | OFFLINE] [IGNORE] TABLE tbl_name
       alter_specification [, alter_specification] ...

    alter_specification:
        ...
        ADD [COLUMN] (col_name column_definition,...)
        ...

Eg: ALTER TABLE table1 ADD COLUMN foo INT DEFAULT 0;
于 2020-05-08T16:31:35.177 に答える
3

この問題に対処するには、2 つの異なる方法があります。どちらもデフォルト値を追加しますが、ここでの問題ステートメントにまったく異なる意味を追加します。

サンプルデータの作成から始めましょう。

サンプル データの作成

CREATE TABLE ExistingTable (ID INT)
GO
INSERT INTO ExistingTable (ID)
VALUES (1), (2), (3)
GO
SELECT *
FROM ExistingTable

ここに画像の説明を入力

1.将来の挿入のためにデフォルト値で列を追加する

ALTER TABLE ExistingTable
ADD ColWithDefault VARCHAR(10) DEFAULT 'Hi'
GO

ここに画像の説明を入力

したがって、新しいレコードを挿入するときにデフォルトの列を追加したので、値が指定されて'Hi'いない場合はデフォルトで値が設定されます

INSERT INTO ExistingTable(ID)
VALUES (4)
GO
Select * from ExistingTable
GO

ここに画像の説明を入力

さて、これはデフォルト値を持つという私たちの問題に対処しますが、ここに問題のキャッチがあります。将来の挿入だけでなく、すべての列にデフォルト値を設定したい場合はどうなりますか? これには方法 2 があります。

2.すべての挿入のデフォルト値で列を追加します

ALTER TABLE ExistingTable
ADD DefaultColWithVal VARCHAR(10) DEFAULT 'DefaultAll'
WITH VALUES
GO
Select * from ExistingTable
GO

ここに画像の説明を入力

次のスクリプトは、考えられるすべてのシナリオでデフォルト値を持つ新しい列を追加します。

尋ねられた質問に価値が追加されることを願っています。ありがとう。

于 2021-11-18T01:39:34.490 に答える
2

ALTER テーブル dataset.tablename ADD column_current_ind integer DEFAULT 0

于 2019-12-04T06:19:25.480 に答える
0

構文:

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

例:

ALTER TABLE Admin_Master 
ADD Can_View_Password  BIT NULL 
CONSTRAINT DF_Admin_Master_Can_View_Password DEFAULT (1)
WITH VALUES 
于 2021-10-26T04:36:00.097 に答える