Mengendalikan konflik kekangan kunci bukan nol, unik atau asing dalam gabungan luar Informix
Apabila melakukan gabungan luar dalam pangkalan data Informix, anda mungkin menghadapi ralat "Tidak dapat mendayakan kekangan. Satu atau lebih baris mengandungi nilai yang melanggar kekangan kunci bukan nol, unik atau asing." Ralat ini menunjukkan bahawa set hasil mengandungi baris pendua dengan kunci utama yang sama, atau baris dengan nilai nol untuk lajur yang tidak membenarkan nilai nol.
Sebab yang berkemungkinan
Potensi punca ralat ini ialah:
Menyelesaikan masalah
Untuk menentukan punca khusus ralat, cuba jalankan pertanyaan anda secara langsung terhadap pangkalan data. Menyemak baris pendua atau nilai nol dalam lajur terhad dalam set hasil.
Gunakan Try/Catch dan GetErrors
Untuk menentukan ralat yang tepat, anda boleh menambah blok Try/Catch pada kod yang dijana dan putus pada titik di mana pengecualian berlaku. Dalam C#, ini dicapai dengan memanggil GetErrors pada jadual di mana ralat ditemui:
<code class="language-c#">try { DataTable dt = TeachingLoadDAL.GetCoursesWithEvalState(i, bat); } catch (Exception e) { if (e is System.Data.SqlClient.SqlException) { var tableWithErrors = dt.GetErrors()[0]; Console.WriteLine("错误行: " + tableWithErrors.RowError); } }</code>
Dalam VB.NET, kodnya adalah seperti berikut:
<code class="language-vb.net">Try Dim dt = TeachingLoadDAL.GetCoursesWithEvalState(i, bat) Catch e As SqlException If TypeOf e Is SqlException Then Dim tableWithErrors = dt.GetErrors(0) Console.WriteLine("错误行: " + tableWithErrors.RowError) End If End Try</code>
Ini akan memaparkan baris data yang mengandungi ralat, bersama-sama dengan mesej ralat khusus yang disimpan dalam RowError.
Selesaikan masalah
Untuk menyelesaikan ralat ini, kenal pasti lajur yang melanggar kekangan dan betulkan data dengan sewajarnya. Untuk baris pendua, pastikan pertanyaan anda tidak mengembalikan berbilang baris dengan kunci utama yang sama. Untuk nilai NULL, kemas kini skema pangkalan data atau definisi set data untuk membenarkan nilai NULL untuk lajur yang terjejas.
Atas ialah kandungan terperinci Bagaimana untuk Mengendalikan Pelanggaran Kekangan dalam Informix Outer Joins?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!