Fungsi Subkueri dalam Kekangan Semak
Penggunaan subkueri dalam kekangan semakan telah menjadi had lama dalam SQL-Server 2008 R2. Artikel ini meneroka isu dan menyediakan penyelesaian alternatif menggunakan fungsi pengembalian skalar.
Masalah:
Apabila cuba mengesahkan nilai lajur terhadap jadual lain menggunakan subkueri dalam kekangan semak, ralat berikut ditemui: "Sub-pertanyaan tidak dibenarkan dalam konteks ini. Hanya ungkapan skalar sahaja dibenarkan."
Latar Belakang:
Kekangan semak digunakan untuk menguatkuasakan integriti pangkalan data dengan menilai ungkapan terhadap setiap baris yang disisipkan atau dikemas kini dalam jadual. Biasanya, ungkapan ini terdiri daripada operasi skalar, bukan subkueri.
Penyelesaian:
Untuk memintas pengehadan ini, fungsi pengembalian skalar tersuai boleh dibuat yang merangkumi keperluan yang diperlukan subquery. Fungsi harus mengeluarkan nilai skalar yang menunjukkan sama ada keadaan subkueri dipenuhi.
Contoh:
Andaikan kita mempunyai jadual yang dipanggil 'Table1' dengan lajur 'MyField' yang perlu disahkan terhadap jadual yang dipanggil 'Jadual2'. Kita boleh mencipta fungsi yang dipanggil 'myFunction' seperti berikut:
CREATE FUNCTION myFunction ( @field DATATYPE(?) ) RETURNS VARCHAR(5) AS BEGIN IF EXISTS (SELECT* FROM Table2 WHERE MYFIELD = @field) return 'True' return 'False' END
Menggunakan Fungsi:
'myFunction' kini boleh digunakan dalam kekangan semakan seperti berikut:
ALTER TABLE Table1 WITH CHECK ADD CONSTRAINT CK_Code CHECK (myFunction(MYFIELD) = 'True')
Ini secara berkesan mencontohi kefungsian subkueri dalam semakan kekangan.
Kesimpulan:
Walaupun subkueri tidak boleh digunakan secara langsung dalam kekangan semak, fungsi pengembalian skalar boleh digunakan untuk mencapai pengesahan yang diingini. Penyelesaian ini membolehkan senario pengesahan data yang lebih kompleks tanpa menjejaskan integriti pangkalan data.
Atas ialah kandungan terperinci Bolehkah Fungsi Bernilai Skalar Melangkau Sekatan Subkueri dalam Pelayan SQL Menyemak Kekangan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!