Saya ingin tahu apakah mungkin untuk membuat tabel dengan kolom yang tidak pernah bisa diubah, tetapi kolom lain dari tabel bisa.
Misalnya saya bisa membayangkan CreatedByUser
kolom yang tidak boleh diubah.
Apakah ada fungsi built-in di SQL Server untuk ini, atau hanya mungkin melalui pemicu atau yang lainnya?
sql-server
Philipp M
sumber
sumber
Jawaban:
Tidak ada dukungan deklaratif bawaan untuk kolom yang tidak dapat diperbarui (kecuali untuk kasus tertentu yang ditentukan sebelumnya seperti
IDENTITY
)Item Connect ini memintanya tetapi ditolak. Tambahkan DRI untuk memberlakukan nilai kolom yang tidak dapat diubah
Sebuah
UPDATE
pemicu mungkin akan menjadi cara yang paling kuat untuk mencapai ini. Itu bisa memeriksaIF UPDATE(CreatedByUser)
dan meningkatkan kesalahan dan mengembalikan transaksi jika benar.sumber
Saya telah membuat implementasi
UPDATE TRIGGER
pendekatan yang disarankan oleh jawaban Martin Smith sebagai berikut:(Catatan: Tabel ini memiliki kolom Kunci Utama, yang disebut ID).
Saya hanya menolak pembaruan jika nilai perubahan AssetTypeID. Jadi kolom bisa hadir dalam pembaruan, dan jika nilainya tidak berubah, maka akan melewati. (Saya butuh cara ini)
sumber
AssetTypeID
diatur ke nilai non-nol dan Anda menjalankanUPDATE Asset SET AssetTypeID = NULL WHERE Asset = the_id
bahwa tidak akan ada kembalikan karenaWHERE i.AssetTypeID <> d.AssetTypeID
dalam pemicu akan mengevaluasi menjadi salah, meninggalkan kolom yang dapat diedit.Anda bisa menggunakan tampilan dengan kolom turunan. Coba ini
sumber
Mengapa Anda memperbarui kolom yang dibuat oleh?
Saya akan memiliki dua kolom, kolom [Created_by] dan [modified_by], di mana sisipan pertama akan menyisipkan semua kolom masing-masing dalam catatan, dan setiap pembaruan berikutnya hanya akan memperbarui kolom [modified_by] (melalui pemicu pada aplikasi. layer Anda dapat menyusun pembaruan hanya mengubah [modified_by], beserta kolom Anda masing-masing)
sumber