Cabaran Parameter Prosedur Tersimpan Pelayan SQL
Menggunakan parameter dengan prosedur tersimpan memperkemas pembangunan pangkalan data. Walau bagaimanapun, membenamkan secara langsung hasil ekspresi atau fungsi dalam senarai parameter prosedur tersimpan boleh membawa kepada isu. Sebagai contoh, kod berikut:
<code class="language-sql">DECLARE @pID int; SET @pID = 1; EXEC WriteLog 'Component', 'Source', 'Could not find given id: ' + CAST(@pID AS varchar);</code>
gagal dalam SQL Server 2005 dan lebih awal, menghasilkan ralat sintaks "Msg 102". Had ini berpunca daripada cara SQL Server mengendalikan parameter.
Penyelesaian: Pembolehubah Perantaraan
Penyelesaian melibatkan penggunaan pembolehubah perantaraan. SQL Server tidak membenarkan pembenaman langsung hasil ungkapan sebagai parameter; bagaimanapun, pembolehubah perantaraan menyediakan penyelesaian.
Sintaks yang diperbetulkan ialah:
<code class="language-sql">DECLARE @pID INT; SET @pID = 1; /* For SQL Server 2008 and later; For earlier versions, these must be separate statements */ DECLARE @string VARCHAR(50) = 'Could not find given id: ' + CAST(@pID AS VARCHAR(11)); EXEC WriteLog 'Component', 'Source', @string;</code>
Dengan memberikan output ungkapan ('Tidak dapat mencari id yang diberikan: ' CAST(@pID AS VARCHAR(11))) kepada pembolehubah @string
, kita kemudiannya boleh menghantar @string
sebagai parameter kepada WriteLog
, menggabungkan hasil ungkapan dengan berkesan. Perhatikan perbezaan penting untuk versi sebelum SQL Server 2008 yang memerlukan pernyataan DECLARE
dan SET
yang berasingan.
Atas ialah kandungan terperinci Bagaimana Mengendalikan Hasil Ungkapan sebagai Parameter Prosedur Tersimpan dalam Pelayan SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!