not - SQL Serverの既存のテーブルに既定値の列を追加する
sql server alter table datetime (20)
構文:
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__4FB7FEF6
: DF__SomeTa__SomeC__4FB7FEF6
オプションのWith Valuesステートメント:
WITH VALUES
は、列がNULL可能である場合にのみ必要です
既存のレコードに使用されるデフォルト値が必要です。
列がNOT NULL
でNOT NULL
場合、自動的にデフォルト値が使用されます
すべての既存レコードについて、 WITH VALUES
を指定するかどうかを指定します。
インサートがデフォルト制約でどのように機能するか:
SomeTable
レコードを挿入し、 SomeCol
の値を指定しないと、デフォルトは0
ます。
レコードを挿入し、 SomeCol
の値をNULL
として指定して(そしてあなたの列がNULLを許可する場合)
Default-Constraintは使用されず 、 NULL
がValueとして挿入されNULL
。
ノートは以下の皆様の素晴らしいフィードバックに基づいています。
特別なおかげで:
@ Yatrix、@WalterStabosz、@ YahooSerious、@StackManのコメントがあります。
SQL Server 2000 / SQL Server 2005の既存のテーブルに既定値の列を追加するにはどうすればよいですか?
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で設定を行い、悪意のある右クリックで 「 変更スクリプトの生成 」オプションが表示されます。 !
あなたが推測したように、適切に書式設定された保証された仕事への変更スクリプトを少し上げてください。 簡単ボタンを押してください。
これには多くの答えがありますが、私はこの拡張メソッドを追加する必要があると感じています。 これはもっと長いようですが、アクティブなデータベースに数百万の行があるテーブルに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の場合、次のようになります。
- SQL Serverで、対象のテーブルのツリーを開きます
- "Columns"を右クリック==>
New Column
- 「名前」、「
Select Type
」、「NULLを許可する」チェック・ボックスのチェック - メニューバーから[
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 ADD ColumnName {Column_Type} Constraint
MSDNの記事ALTER TABLE(Transact-SQL)には、すべてのalter table構文があります。
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の列を追加できます。