Bagaimana saya bisa menambahkan kolom dengan nilai default ke tabel yang ada di SQL Server 2000 / SQL Server 2005 ?
Bagaimana saya bisa menambahkan kolom dengan nilai default ke tabel yang ada di SQL Server 2000 / SQL Server 2005 ?
Jawaban:
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.
Opstraint Name Opsional:
Jika Anda keluar CONSTRAINT D_SomeTable_SomeCol
maka SQL Server akan membuat autogenerate
Default-Contraint dengan Nama lucu seperti:DF__SomeTa__SomeC__4FB7FEF6
Opsional Dengan-Nilai Pernyataan:
The WITH VALUES
hanya diperlukan bila Kolom Anda Nullable
dan Anda ingin Default Nilai digunakan untuk yang ada Records.
Jika Kolom Anda NOT NULL
, maka itu akan secara otomatis menggunakan Nilai Default
untuk semua Catatan yang Ada, apakah Anda menentukan WITH VALUES
atau tidak.
Bagaimana Sisipan bekerja dengan Batasan-Default:
Jika Anda memasukkan Catatan ke SomeTable
dan tidak MenentukanSomeCol
nilai, maka akan menjadi Default untuk 0
.
Jika Anda memasukkan Rekam dan Tentukan SomeCol
nilai sebagai NULL
(dan kolom Anda memungkinkan nol),
maka Batasan Default tidak akan digunakan dan NULL
akan dimasukkan sebagai Nilai.
Catatan didasarkan pada tanggapan semua orang di bawah ini.
Terima kasih khusus kepada
@Yatrix, @WalterStabosz, @YahooSerious, dan @StackMan atas komentar mereka.
NOT NULL
. Silakan coba ini: create table blah(a int not null primary key clustered); insert blah values (1), (2); alter table blah add b int null constraint df_blah_b default (0); select * from blah;
Anda akan melihat 2 nilai NULL untuk kolom b
.
WITH VALUES
untuk memperbarui baris nullable yang ada. Lihat MSDN : "Jika kolom yang ditambahkan memungkinkan nilai nol dan WITH VALUES
ditentukan, nilai default disimpan di kolom baru, ditambahkan ke baris yang ada."
ALTER TABLE Protocols
ADD ProtocolTypeID int NOT NULL DEFAULT(1)
GO
Dimasukkannya DEFAULT mengisi kolom di baris yang ada dengan nilai default, sehingga batasan NOT NULL tidak dilanggar.
Saat menambahkan kolom nullable , WITH VALUES
akan memastikan bahwa nilai DEFAULT spesifik diterapkan ke baris yang ada:
ALTER TABLE table
ADD column BIT -- Demonstration with NULL-able column added
CONSTRAINT Constraint_name DEFAULT 0 WITH VALUES
DEFAULT
batasan akan selalu memiliki nilai - yaitu, bukan NULL, meskipun NOT NULL
tidak ditentukan.
BIT
tipe data, saya sedang berbicara tentang BIT
kolom khusus ini . Lihatlah jawabannya, kolomnya dinyatakan sebagai NOT NULL
.
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
Waspadalah ketika kolom yang Anda tambahkan memiliki NOT NULL
kendala, namun tidak memiliki DEFAULT
kendala (nilai). The ALTER TABLE
pernyataan akan gagal dalam kasus itu jika tabel memiliki baris di dalamnya. Solusinya adalah dengan menghapus NOT NULL
kendala dari kolom baru, atau memberikan DEFAULT
kendala untuk itu.
Jika Anda ingin menambahkan beberapa kolom, Anda dapat melakukannya dengan cara ini misalnya:
ALTER TABLE YourTable
ADD Column1 INT NOT NULL DEFAULT 0,
Column2 INT NOT NULL DEFAULT 1,
Column3 VARCHAR(50) DEFAULT 'Hello'
GO
Menggunakan:
ALTER TABLE {TABLENAME}
ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL}
CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}
Referensi: ALTER TABLE (Transact-SQL) (MSDN)
Untuk menambahkan kolom ke tabel database yang ada dengan nilai default, kita dapat menggunakan:
ALTER TABLE [dbo.table_name]
ADD [Column_Name] BIT NOT NULL
Default ( 0 )
Berikut ini cara lain untuk menambahkan kolom ke tabel database yang ada dengan nilai default.
Skrip SQL yang jauh lebih menyeluruh untuk menambahkan kolom dengan nilai default di bawah ini termasuk memeriksa apakah kolom itu ada sebelum menambahkannya juga checkin kendala dan menjatuhkannya jika ada. Script ini juga memberi nama batasan sehingga kita dapat memiliki konvensi penamaan yang bagus (saya suka DF_) dan jika tidak SQL akan memberi kita batasan dengan nama yang memiliki nomor yang dihasilkan secara acak; jadi senang bisa menyebutkan batasannya juga.
-------------------------------------------------------------------------
-- 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
Ini adalah dua cara untuk menambahkan kolom ke tabel database yang ada dengan nilai default.
Anda dapat melakukan hal itu dengan T-SQL dengan cara berikut.
ALTER TABLE {TABLENAME}
ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL}
CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}
Serta Anda dapat menggunakan SQL Server Management Studio juga dengan mengklik kanan tabel di menu Desain, mengatur nilai default ke tabel.
Dan selanjutnya, jika Anda ingin menambahkan kolom yang sama (jika tidak ada) ke semua tabel dalam database, maka gunakan:
USE AdventureWorks;
EXEC sp_msforeachtable
'PRINT ''ALTER TABLE ? ADD Date_Created DATETIME DEFAULT GETDATE();''' ;
Dalam SQL Server 2008-R2, saya pergi ke mode desain - dalam database pengujian - dan menambahkan dua kolom saya menggunakan desainer dan membuat pengaturan dengan GUI, dan kemudian yang terkenal Right-Clickmemberi pilihan " Hasilkan Ubah Script "!
Bang up muncul jendela kecil dengan, Anda dapat menebaknya, skrip perubahan dijamin untuk bekerja yang diformat dengan benar. Tekan tombol mudah.
Atau, Anda dapat menambahkan default tanpa harus memberi nama batasan secara eksplisit:
ALTER TABLE [schema].[tablename] ADD DEFAULT ((0)) FOR [columnname]
Jika Anda memiliki masalah dengan batasan default yang ada saat membuat batasan ini maka mereka dapat dihilangkan dengan:
alter table [schema].[tablename] drop constraint [constraintname]
Ini dapat dilakukan di GUI SSMS juga. Saya menunjukkan tanggal default di bawah ini, tetapi nilai defaultnya bisa berapa saja, tentu saja.
(getdate())
atau abc
atau 0
atau nilai apa pun yang Anda inginkan di bidang Nilai Default atau Binding seperti yang digambarkan di bawah ini:ALTER TABLE ADD ColumnName {Column_Type} Constraint
Artikel MSDN ALTER TABLE (Transact-SQL) memiliki semua sintaks tabel alter.
Contoh:
ALTER TABLE tes
ADD ssd NUMBER DEFAULT '0';
Ini memiliki banyak jawaban, tetapi saya merasa perlu menambahkan metode yang diperluas ini. Ini tampaknya jauh lebih lama, tetapi ini sangat berguna jika Anda menambahkan bidang NOT NULL ke tabel dengan jutaan baris dalam database aktif.
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
Apa yang akan dilakukan adalah menambahkan kolom sebagai bidang yang dapat dibatalkan dan dengan nilai default, perbarui semua bidang ke nilai default (atau Anda dapat menetapkan nilai yang lebih bermakna), dan akhirnya akan mengubah kolom menjadi TIDAK NULL.
Alasan untuk ini adalah jika Anda memperbarui tabel skala besar dan menambahkan bidang bukan nol yang baru ia harus menulis ke setiap baris dan dengan ini akan mengunci seluruh tabel saat menambahkan kolom dan kemudian menulis semua nilai.
Metode ini akan menambahkan kolom nullable yang beroperasi jauh lebih cepat dengan sendirinya, kemudian mengisi data sebelum menetapkan status bukan nol.
Saya telah menemukan bahwa melakukan seluruh hal dalam satu pernyataan akan mengunci salah satu tabel kami yang lebih aktif selama 4-8 menit dan cukup sering saya membunuh prosesnya. Metode ini setiap bagian biasanya hanya membutuhkan beberapa detik dan menyebabkan penguncian minimal.
Selain itu, jika Anda memiliki tabel di bidang miliaran baris, mungkin layak untuk mengelompokkan pembaruan seperti:
WHILE 1=1
BEGIN
UPDATE TOP (1000000) {schemaName}.{tableName}
SET {columnName} = {DefaultValue}
WHERE {columName} IS NULL
IF @@ROWCOUNT < 1000000
BREAK;
END
Coba ini
ALTER TABLE Product
ADD ProductID INT NOT NULL DEFAULT(1)
GO
SQL Server + Alter Table + Tambahkan Kolom + Nilai Default uniqueidentifier
ALTER TABLE Product
ADD ReferenceID uniqueidentifier not null
default (cast(cast(0 as binary) as uniqueidentifier))
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
NOT EXISTS
cek sebelum mencoba mengubah tabel. Solusi yang sangat bagus Beberapa komentar tambahan tentang cara kerjanya akan membuatnya lebih bermanfaat.
--Adding Value with Default Value
ALTER TABLE TestTable
ADD ThirdCol INT NOT NULL DEFAULT(0)
GO
Tambahkan kolom baru ke tabel:
ALTER TABLE [table]
ADD Column1 Datatype
Sebagai contoh,
ALTER TABLE [test]
ADD ID Int
Jika pengguna ingin menambahkannya secara otomatis, maka:
ALTER TABLE [test]
ADD ID Int IDENTITY(1,1) NOT NULL
Ini untuk SQL Server:
ALTER TABLE TableName
ADD ColumnName (type) -- NULL OR NOT NULL
DEFAULT (default value)
WITH VALUES
Contoh:
ALTER TABLE Activities
ADD status int NOT NULL DEFAULT (0)
WITH VALUES
Jika Anda ingin menambahkan kendala maka:
ALTER TABLE Table_1
ADD row3 int NOT NULL
CONSTRAINT CONSTRAINT_NAME DEFAULT (0)
WITH VALUES
Ini dapat dilakukan dengan kode di bawah ini.
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
Coba dengan kueri di bawah ini:
ALTER TABLE MyTable
ADD MyNewColumn DataType DEFAULT DefaultValue
Ini akan menambahkan kolom baru ke dalam Tabel.
ALTER TABLE tbl_table ADD int_column int NOT NULL DEFAULT(0)
Dari kueri ini Anda bisa menambahkan kolom integer datatype dengan nilai default 0.
Nah, sekarang saya memiliki beberapa modifikasi pada jawaban saya sebelumnya. Saya perhatikan bahwa tidak ada jawaban yang disebutkan IF NOT EXISTS
. Jadi saya akan memberikan solusi baru karena saya telah menghadapi beberapa masalah mengubah tabel.
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
Ini TaskSheet
adalah nama tabel tertentu dan IsBilledToClient
merupakan kolom baru yang akan Anda sisipkan dan 1
nilai default. Itu berarti di kolom baru apa yang akan menjadi nilai dari baris yang ada, oleh karena itu satu akan ditetapkan secara otomatis di sana. Namun, Anda dapat mengubah sesuai keinginan dengan menghormati jenis kolom seperti yang saya gunakan BIT
, jadi saya memasukkan nilai default 1.
Saya menyarankan sistem di atas, karena saya menghadapi masalah. Jadi apa masalahnya? Masalahnya adalah, jika IsBilledToClient
kolom memang ada dalam tabel tabel maka jika Anda hanya menjalankan bagian dari kode yang diberikan di bawah ini Anda akan melihat kesalahan dalam pembangun kueri SQL server. Tetapi jika tidak ada maka untuk pertama kalinya tidak akan ada kesalahan saat mengeksekusi.
ALTER TABLE {TABLENAME}
ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL}
CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}
[WITH VALUES]