Kendala Unik pada Kolom Nullable di SQL Server 2005

12

Dalam proyek yang saya kerjakan ini, saya perlu mengatur bidang tertentu menjadi unik (bukan masalah!) Tetapi jika bidang tersebut nol, saya ingin kendala diabaikan. Di Sql Server 2008 saya menggunakan indeks yang disaring seperti yang ditunjukkan di bawah ini tetapi ini tidak tersedia dalam versi SQL yang lebih lama!

CREATE UNIQUE NONCLUSTERED INDEX User_UserName_IUC
ON [User] (pinNr)
WHERE UserName IS NOT NULL

Tapi saya tidak berpikir ini tersedia di SQL Server 2005. Bahkan posting blog ini menunjukkan ada solusi menggunakan pemicu untuk memeriksa keunikan. Adakah yang punya contoh tentang ini? atau mungkin alternatif?

Sayangnya upgrade ke SQl Server 2008 bukan merupakan pilihan untuk klien khusus ini !!

Bidik Kai
sumber

Jawaban:

18

Sebenarnya, saya harus melakukan sesuatu seperti ini sekali. Ini melibatkan pembuatan kolom yang dihitung yang mengambil nilai kolom Unik ketika tidak NULLdan nilai kunci utama (dengan beberapa logika lain untuk membuatnya tidak mungkin untuk berbenturan dengan nilai-nilai pada kolom unik), dan membuat indeks unik pada kolom itu. Anda dapat melihat contohnya dan metode pemicunya di sini .

Lamak
sumber
7

Anda dapat membuat tampilan (Di mana Nama Pengguna tidak nol) kemudian menempatkan indeks unik terhadap tampilan. Anda tidak perlu menggunakan tampilan, itu hanya akan ada untuk ini.

Anda juga dapat menggunakan teknik ini untuk menegakkan keunikan di beberapa tabel, di mana biasanya tidak mungkin.

Meff
sumber
2
Tampilan yang diindeks tidak memerlukan edisi perusahaan. Namun, mereka mengharuskan Anda menggunakan petunjuk permintaan WITH (NOEXPAND) untuk memaksa pengoptimal permintaan edisi standar untuk menggunakan tampilan yang diindeks alih-alih permintaan yang mendasarinya.
Jeremiah Peschka
3
Dalam hal ini meskipun satu-satunya sudut pandang adalah untuk menegakkan batasan unik dan ini adalah pendekatan yang benar-benar valid / umum.
Martin Smith
2
Diedit untuk menghapus informasi yang salah tentang Edisi Perusahaan yang diperlukan.
Meff
@ Maaf terima kasih telah meluangkan waktu untuk menanggapi komentar di sini - Saya harap Anda tidak akan menjadi orang asing di situs ini: Anda mungkin tertarik dengan pertanyaan ini :)
Jack mengatakan coba topanswers.xyz