Fungsi skalar digunakan dalam kolom terhitung, apa cara paling bersih untuk memperbarui fungsi?

10

Saya ingin memperbarui fungsi skalar di basis data kami. Fungsi ini digunakan untuk beberapa kolom terhitung dalam tabel kunci jadi saya mendapatkan kesalahan ketergantungan jika saya mencoba untuk memperbaruinya. Saya dapat secara eksplisit menghapus kolom, memperbarui fungsi dan menambahkan kembali kolom tetapi, tanpa banyak penggemar tambahan, yang akan mengubah pesanan kolom dan mungkin memiliki konsekuensi yang tidak diinginkan lainnya. Saya bertanya-tanya apakah ada cara yang lebih bersih untuk melakukannya?

robertc
sumber
4
Saya menyelesaikan ini hanya sebagian dengan membuat fungsi dummy yang memanggil yang asli. Tentu saja, jika tanda tangan berubah, maka semuanya akan terulang kembali.
3
Sayangnya, saya tidak berpikir ada cara "ajaib" atau "bersih" untuk melakukan ini. Jika Anda perlu memodifikasi fungsi - Anda harus menjatuhkan kolom, memodifikasi fungsi, dan menambahkan kembali semua kolom. Tidak ada jalan lain.
marc_s
@marc_s Yah patut dicoba, banyak orang pintar di sekitar sini :)
robertc
Setuju dengan komentar di atas. Berpikir mungkin ada ruang lingkup untuk SYNONYM untuk menawarkan bantuan di sini (merujuk SYNONYM di kolom yang dihitung) - tetapi Anda tidak dapat MENGUBAH sinonim yang pernah dibuat untuk "mengalihkan" ke objek lain.
AdaTheDev
1
Masih sama sulitnya dengan memperbarui definisi CLR UDT (bahkan ketika perubahan itu hanya mengubah metode dan tidak mempengaruhi representasi penyimpanan sama sekali)
Martin Smith

Jawaban:

2

Ini mungkin lebih banyak pekerjaan tetapi harus mendapatkan (kurang-lebih) apa yang Anda cari:

1 - Buat tabel baru yang baru saja menggunakan PK Anda dari tabel utama dan fungsi yang diperbarui.

2 - Jatuhkan kolom lama Anda

3 - Ubah nama meja lama Anda menjadi sesuatu seperti TableName_Base

4 - Buat VIEWyang menggabungkan tabel utama Anda ke tabel pencarian Anda, dengan bidang-bidang dalam urutan yang ingin Anda lihat. Beri nama tampilan apa pun nama tabel asli Anda.

Ini berpotensi menimbulkan beberapa masalah dengan INSERTSdan UPDATESkarena Anda akan mengakses melalui tampilan. Untuk mengatasinya Anda bisa memasukkan ke dalam tabel secara langsung, melewati tampilan.

JNK
sumber
Kedengarannya seperti lebih banyak pekerjaan dan tingkat risiko yang sama seperti menghapus dan menambahkan kembali kolom.
robertc
1
@robertc Akan kurang mengganggu jika ini adalah lingkungan transaksi yang tinggi, tapi ya itu masih cukup berantakan.
JNK