Bagaimana saya bisa menambahkan kolom dengan nilai default ke tabel yang ada di SQL Server 2000 / SQL Server 2005 ?
2767
Bagaimana saya bisa menambahkan kolom dengan nilai default ke tabel yang ada di SQL Server 2000 / SQL Server 2005 ?
Jawaban:
Sintaksis:
Contoh:
Catatan:
Opstraint Name Opsional:
Jika Anda keluar
CONSTRAINT D_SomeTable_SomeCol
maka SQL Server akan membuat autogenerateDefault-Contraint dengan Nama lucu seperti:
DF__SomeTa__SomeC__4FB7FEF6
Opsional Dengan-Nilai Pernyataan:
The
WITH VALUES
hanya diperlukan bila Kolom Anda Nullabledan Anda ingin Default Nilai digunakan untuk yang ada Records.
Jika Kolom Anda
NOT NULL
, maka itu akan secara otomatis menggunakan Nilai Defaultuntuk 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 untuk0
.Jika Anda memasukkan Rekam dan Tentukan
SomeCol
nilai sebagaiNULL
(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.
sumber
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 kolomb
.WITH VALUES
untuk memperbarui baris nullable yang ada. Lihat MSDN : "Jika kolom yang ditambahkan memungkinkan nilai nol danWITH VALUES
ditentukan, nilai default disimpan di kolom baru, ditambahkan ke baris yang ada."Dimasukkannya DEFAULT mengisi kolom di baris yang ada dengan nilai default, sehingga batasan NOT NULL tidak dilanggar.
sumber
Saat menambahkan kolom nullable ,
WITH VALUES
akan memastikan bahwa nilai DEFAULT spesifik diterapkan ke baris yang ada:sumber
DEFAULT
batasan akan selalu memiliki nilai - yaitu, bukan NULL, meskipunNOT NULL
tidak ditentukan.BIT
tipe data, saya sedang berbicara tentangBIT
kolom khusus ini . Lihatlah jawabannya, kolomnya dinyatakan sebagaiNOT NULL
.sumber
sumber
Waspadalah ketika kolom yang Anda tambahkan memiliki
NOT NULL
kendala, namun tidak memilikiDEFAULT
kendala (nilai). TheALTER TABLE
pernyataan akan gagal dalam kasus itu jika tabel memiliki baris di dalamnya. Solusinya adalah dengan menghapusNOT NULL
kendala dari kolom baru, atau memberikanDEFAULT
kendala untuk itu.sumber
Versi paling dasar dengan dua baris saja
sumber
Menggunakan:
sumber
Jika Anda ingin menambahkan beberapa kolom, Anda dapat melakukannya dengan cara ini misalnya:
sumber
Menggunakan:
Referensi: ALTER TABLE (Transact-SQL) (MSDN)
sumber
Untuk menambahkan kolom ke tabel database yang ada dengan nilai default, kita dapat menggunakan:
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.
Ini adalah dua cara untuk menambahkan kolom ke tabel database yang ada dengan nilai default.
sumber
Anda dapat melakukan hal itu dengan T-SQL dengan cara berikut.
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:
sumber
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.
sumber
Atau, Anda dapat menambahkan default tanpa harus memberi nama batasan secara eksplisit:
Jika Anda memiliki masalah dengan batasan default yang ada saat membuat batasan ini maka mereka dapat dihilangkan dengan:
sumber
Ini dapat dilakukan di GUI SSMS juga. Saya menunjukkan tanggal default di bawah ini, tetapi nilai defaultnya bisa berapa saja, tentu saja.
(getdate())
atauabc
atau0
atau nilai apa pun yang Anda inginkan di bidang Nilai Default atau Binding seperti yang digambarkan di bawah ini:sumber
Artikel MSDN ALTER TABLE (Transact-SQL) memiliki semua sintaks tabel alter.
sumber
Contoh:
sumber
Contoh:
sumber
Pertama-tama buat tabel dengan nama siswa:
Tambahkan satu kolom ke dalamnya:
Tabel dibuat dan kolom ditambahkan ke tabel yang ada dengan nilai default.
sumber
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.
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:
sumber
Coba ini
sumber
SQL Server + Alter Table + Tambahkan Kolom + Nilai Default uniqueidentifier
sumber
sumber
NOT EXISTS
cek sebelum mencoba mengubah tabel. Solusi yang sangat bagus Beberapa komentar tambahan tentang cara kerjanya akan membuatnya lebih bermanfaat.sumber
Tambahkan kolom baru ke tabel:
Sebagai contoh,
Jika pengguna ingin menambahkannya secara otomatis, maka:
sumber
Ini untuk SQL Server:
Contoh:
Jika Anda ingin menambahkan kendala maka:
sumber
Ini dapat dilakukan dengan kode di bawah ini.
sumber
Coba dengan kueri di bawah ini:
Ini akan menambahkan kolom baru ke dalam Tabel.
sumber
Dari kueri ini Anda bisa menambahkan kolom integer datatype dengan nilai default 0.
sumber
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.Ini
TaskSheet
adalah nama tabel tertentu danIsBilledToClient
merupakan kolom baru yang akan Anda sisipkan dan1
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 gunakanBIT
, 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.sumber