not - SQL Serverの既存のテーブルに既定値の列を追加する




sql server alter table datetime (20)

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


構文:

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はCONSTRAINT D_SomeTable_SomeColに生成します
面白い名前のDefault- DF__SomeTa__SomeC__4FB7FEF6DF__SomeTa__SomeC__4FB7FEF6

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

インサートがデフォルト制約でどのように機能するか:
SomeTableレコードを挿入し、 SomeColの値を指定しないと、デフォルトは0ます。
レコードを挿入し、 SomeColの値をNULLとして指定して(そしてあなたの列がNULLを許可する場合)
Default-Constraintは使用されNULLがValueとして挿入されNULL

ノートは以下の皆様の素晴らしいフィードバックに基づいています。
特別なおかげで:
@ Yatrix、@WalterStabosz、@ YahooSerious、@StackManのコメントがあります。


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

ALTER TABLE MyTable
ADD MyNewColumn INT NOT NULL DEFAULT 0

SQL Server +テーブルの変更+列の追加+既定値uniqueidentifier

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

SQL Server 2008-R2では、テストモードで設計モードに入り、デザイナを使用して2つの列を追加し、GUIで設定を行い、悪意のある右クリックで変更スクリプトの生成 」オプションが表示されます。 !

あなたが推測したように、適切に書式設定された保証された仕事への変更スクリプトを少し上げてください。 簡単ボタンを押してください。


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

CREATE TABLE STUDENT (STUDENT_ID INT NOT NULL)

1つの列を追加する:

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

SELECT * 
FROM STUDENT

テーブルが作成され、既定値を使用して既存のテーブルに列が追加されます。


これには多くの答えがありますが、私はこの拡張メソッドを追加する必要があると感じています。 これはもっと長いようですが、アクティブなデータベースに数百万の行があるテーブルに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に変更します。

この理由は、大規模なテーブルを更新し、新しい1つの行に書き込む必要がある新しいnullでないフィールドを追加すると、列を追加するときにテーブル全体がロックアウトされ、すべての値が書き込まれるためです。

このメソッドは、それ自身ではるかに高速に動作するnull可能な列を追加してから、nullでない状態を設定する前にデータを埋め込みます。

1つのステートメントで全体を実行すると、私たちのよりアクティブなテーブルのうちの1つが4-8分間ロックアウトされ、かなり頻繁にそのプロセスが終了することがわかりました。 この方法では、通常、各部分にわずか数秒しかかからず、ロックが最小限に抑えられます。

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

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

    IF @@ROWCOUNT < 1000000
        BREAK;
END

これは以下のコードで行うことができます。

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

これを試して

ALTER TABLE Product
ADD ProductID INT NOT NULL DEFAULT(1)
GO

つかいます:

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

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

つかいます:

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

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


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

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

完了!


代わりに、明示的に制約の名前を付けずに、デフォルトを追加することもできます。

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

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

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

例:

ALTER TABLE tes 
ADD ssd  NUMBER   DEFAULT '0';

既定値で既存のデータベーステーブルに列を追加するには、以下を使用できます。

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つの方法です。


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

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

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


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


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

DEFAULTを含めると、 既存の行の列がデフォルト値で満たされるため、NOT NULL制約に違反しません。


ALTER TABLE tbl_table ADD int_column int NOT NULL DEFAULT(0)

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





sql-server-2000