SQL Server: Mencegah Penyertaan Pendua dengan Sisipan Bersyarat
Apabila bekerja dengan pangkalan data SQL Server, menghalang pemasukan data pendua adalah penting untuk mengekalkan integriti data. Pendekatan biasa melibatkan penggunaan sisipan bersyarat, selalunya menghadapi isu sintaks. Ralat "Msg 156, Tahap 15, Sintaks salah berhampiran kata kunci 'WHERE'" kerap timbul daripada pelaksanaan logik "Sisipkan jika tidak wujud" yang salah.
Penyelesaian terletak pada penstrukturan semula pernyataan sisipan. Daripada percubaan langsung "Sisipkan jika tidak wujud", gunakan blok bersyarat:
<code class="language-sql">BEGIN IF NOT EXISTS (SELECT 1 FROM EmailsRecebidos WHERE De = @_DE AND Assunto = @_ASSUNTO AND Data = @_DATA) BEGIN INSERT INTO EmailsRecebidos (De, Assunto, Data) VALUES (@_DE, @_ASSUNTO, @_DATA) END END</code>
Kod yang disemak ini menggunakan IF NOT EXISTS
untuk menyemak kewujudan rekod yang sepadan dengan kriteria yang ditentukan (De, Assunto, Data) sebelum mencuba sisipan. Ini menghalang entri pendua. Perhatikan penggunaan SELECT 1
untuk kecekapan; ia hanya perlu mencari satu baris yang sepadan, bukan mengambil semua lajur.
Walaupun kaedah ini berkesan mengendalikan kebanyakan senario, adalah penting untuk mengakui potensi keadaan perlumbaan dalam persekitaran berkonkurensi tinggi. Untuk memastikan integriti data mutlak, pertimbangkan teknik yang lebih mantap seperti prosedur tersimpan, pencetus atau mekanisme penguncian yang sesuai untuk mengurus akses serentak dan mengelakkan ketidakkonsistenan data.
Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan 'Sintaks yang salah berhampiran kata kunci 'WHERE'' Apabila Memasukkan Data Unik dalam SQL Server?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!