Di SQL Server, saya memiliki kolom baru di atas meja:
ALTER TABLE t_tableName
ADD newColumn NOT NULL
Ini gagal karena saya menentukan TIDAK NULL tanpa menentukan batasan default. Tabel seharusnya tidak memiliki batasan default.
Untuk menyiasatinya, saya bisa membuat tabel dengan batasan default dan kemudian menghapusnya.
Namun, tampaknya tidak ada cara untuk menentukan bahwa batasan default harus dinamai sebagai bagian dari pernyataan ini, jadi satu-satunya cara saya untuk menghilangkannya adalah dengan memiliki prosedur tersimpan yang mencari di sys.default_constraints meja.
Ini agak berantakan / bertele-tele untuk operasi yang kemungkinan akan banyak terjadi. Adakah yang punya solusi yang lebih baik untuk ini?
NOT NULL
berdekatan dengan tipe data? Secara sintaksis mungkin valid untuk meletakkannya setelah batasan, tetapi tampaknya membingungkan untuk meletakkannya di sana.sumber
Saya ingin menambahkan beberapa detail, karena jawaban yang ada agak tipis :
Petunjuk paling penting adalah: Anda seharusnya tidak pernah membuat batasan tanpa nama eksplisit!
Masalah terbesar dengan kendala yang tidak disebutkan namanya : Ketika Anda menjalankan ini pada berbagai mesin pelanggan, Anda akan mendapatkan nama yang berbeda / acak pada masing-masingnya.
Setiap script upgrade masa depan akan menjadi sakit kepala ...
Nasihat umum adalah:
DF_TableName_ColumnName
untuk kendala standarCK_TableName_ColumnName
untuk kendala pemeriksaanUQ_TableName_ColumnName
untuk kendala yang unikPK_TableName
untuk batasan kunci primerSintaks umumnya adalah
Coba ini di sini
Anda bisa menambahkan lebih banyak kendala ke setiap kolom dan Anda bisa menambahkan kendala tambahan sama seperti Anda menambahkan kolom setelah koma:
- masukkan beberapa data
sumber
Coba seperti di bawah ini skrip-
sumber