Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Meluluskan Keputusan Ungkapan sebagai Parameter Prosedur Tersimpan dengan Betul?

Bagaimana untuk Meluluskan Keputusan Ungkapan sebagai Parameter Prosedur Tersimpan dengan Betul?

Patricia Arquette
Patricia Arquetteasal
2025-01-11 17:12:43515semak imbas

How to Correctly Pass Expression Results as Stored Procedure Parameters?

SQL Server Stored Procedure Parameter Pitfalls: Mengendalikan Keputusan Ungkapan

Melalukan output ungkapan atau panggilan fungsi secara langsung sebagai parameter dalam prosedur tersimpan SQL Server selalunya membawa kepada ralat. Mari kita gambarkan ini dengan isu biasa yang dihadapi dalam SQL Server 2005:

Coretan kod berikut menjana ralat sintaks:

<code class="language-sql">DECLARE @pID int;
SET @pID = 1;
EXEC WriteLog 'Component', 'Source', 'Could not find given id: ' + CAST(@pID AS varchar);</code>

Ini mengakibatkan ralat:

<code>Msg 102, Level 15, State 1, Line 4
Incorrect syntax near '+'.</code>

Punca punca? SQL Server tidak membenarkan penggunaan langsung ekspresi atau hasil fungsi dalam senarai parameter prosedur yang disimpan. Penyelesaian melibatkan pembolehubah perantaraan.

Berikut ialah pendekatan yang diperbetulkan:

<code class="language-sql">DECLARE @pID INT;
DECLARE @logMessage VARCHAR(50);

SET @pID = 1;
SET @logMessage = 'Could not find given id: ' + CAST(@pID AS VARCHAR(11));
EXEC WriteLog 'Component', 'Source', @logMessage;</code>

Kod yang disemak ini memberikan hasil ungkapan kepada @logMessage, yang kemudiannya diiktiraf dengan betul sebagai parameter ketiga. Prosedur tersimpan dilaksanakan tanpa ralat.

Adalah penting untuk ambil perhatian: Sekatan ini terpakai semata-mata pada nilai parameter; ungkapan dalam badan prosedur yang disimpan tidak terjejas.

Atas ialah kandungan terperinci Bagaimana untuk Meluluskan Keputusan Ungkapan sebagai Parameter Prosedur Tersimpan dengan Betul?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn