Saya menambahkan kolom baru di Tabel X
Kolom ini "cn" harus unik dan wajib, tetapi data lama tidak memiliki nilai.
Bagaimana cara memperbarui catatan yang ada dengan data unik secara langsung atau acak?
Terima kasih.
sumber
Saya menambahkan kolom baru di Tabel X
Kolom ini "cn" harus unik dan wajib, tetapi data lama tidak memiliki nilai.
Bagaimana cara memperbarui catatan yang ada dengan data unik secara langsung atau acak?
Terima kasih.
Meskipun saya pikir Anda sudah membuat kolom, dalam jawaban ini saya akan asumsi bahwa kolom belum ada. IMO, kolom wajib yang unik tidak boleh ditambahkan tanpa merencanakan bagaimana mengisi baris yang ada terlebih dahulu. Karena itu, saya akan memberikan metode untuk melakukan ini mulai dari nol.
Bagaimana Anda melakukan ini tergantung pada apa yang terlibat dalam mengisi nilai-nilai.
Setelah metode apa pun yang Anda gunakan, tambahkan batasan unik pada kolom untuk memastikan integritas data. Untuk Metode 1 dan 2, ini dapat dilakukan dalam satu pernyataan atau dalam transaksi pengguna (tidak ditampilkan), dan harus dilakukan dalam transaksi pengguna dalam Metode 3.
Mungkin ada beberapa cara lain yang tidak jelas untuk melakukan ini, tapi saya pikir saya sudah membahas yang paling umum.
Metode 1: Tambahkan kolom IDENTITAS
ALTER TABLE MyTable ADD MyColumn int IDENTITY(1, 2) NOT NULL
Ini akan mengisi semua baris dalam tabel dengan nilai integer yang dimulai dengan nilai seed (1), meningkat dengan nilai increment (2) untuk setiap baris. Saya percaya bahwa urutan nilai yang dihuni tidak ditentukan (jika Anda harus menentukan pesanan, gunakan Metode 3).
Metode 2: Mengisi menggunakan batasan default
ALTER TABLE MyTable ADD MyColumn uniqueidentifier NOT NULL
CONSTRAINT DF_MyTable_MyColumn
DEFAULT (NEWSEQUENTIALID())
Ini akan melakukan tiga hal secara atom: 1. Tambahkan kolom yang tidak memungkinkan NULL
nilai; 2. Buat batasan default untuk kolom; 3. Populasikan setiap baris dalam tabel menggunakan batasan default.
Meskipun contoh ini menggunakan uniqueidentifier
kolom, ia berfungsi dengan baik dengan semua tipe data dan batasan default.
Metode 3: Populasikan menggunakan pernyataan UPDATE
Kasus ini akan terjadi ketika, misalnya, ada nilai dari bagian lain aplikasi Anda yang perlu ditambahkan ke tabel, atau Anda perlu menentukan urutan yang tepat untuk nilai unik.
BEGIN TRANSACTION
ALTER TABLE MyTable ADD MyColumn int NULL
UPDATE MyTable
SET MyColumn = ...
ALTER TABLE MyTable ALTER COLUMN MyColumn int NOT NULL
COMMIT TRANSACTION
Metode 4: Mengisi menggunakan objek URUTAN
Untuk SQL Server 2012, Anda dapat mengisi kolom menggunakan nilai yang dihasilkan oleh SEQUENCE
objek - saya belum bekerja dengan ini sama sekali, jadi saya akan merujuk ke artikel MSDN untuk kelengkapan.
update mytable set mycolumn = next value for mysequence where mycolumn is null;
Jika Anda senang dengan angka mulai dari 1 yang dapat Anda gunakan
row_number()
.sumber
Kolom pembaruan berikut 'cn' dengan nomor urut mulai dari 1
http://www.mssqltips.com/sqlservertip/1467/populate-a-sql-server-column-with-a-entialential-number-not-using-an-identity/
sumber
coba ini untuk memperbarui menggunakan urutan ... Anda harus melakukan TOP karena urutan oleh klausa dalam pernyataan pembaruan. Saya menggunakan pernyataan ini pada SQL SERVER 2012
sumber
Dan jika semua ini masih tidak berhasil (mungkin karena itu SQL-92 tua), Anda dapat memecahnya menjadi beberapa langkah, seperti yang disarankan oleh Ziggy Crueltyfree Zeitgeister, di sini .
sumber
RecordNumber
? Sepertinya fungsi / fitur Pembuat Film eksklusif. Tidak berlaku untuk SQL Server dan tidak dalam standar SQL 92.Filemaker
jadi saya tidak berpikir jawabannya relevan. Anda bisa menggunakan tabel temp dan mengisi kolom itu denganROW_NUMBER()
fungsi.