Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Melewati Parameter dengan Betul dalam Pernyataan SQL Dinamik T-SQL?

Bagaimana untuk Melewati Parameter dengan Betul dalam Pernyataan SQL Dinamik T-SQL?

DDD
DDDasal
2025-01-05 03:02:39721semak imbas

How to Correctly Pass Parameters in T-SQL Dynamic SQL Statements?

Melalui Parameter dalam Pernyataan SQL Dinamik dengan T-SQL

Dalam T-SQL, SQL dinamik menyediakan cara untuk membina dan melaksanakan pernyataan SQL secara pemrograman. Apabila menggunakan parameter dalam SQL dinamik, adalah penting untuk memahami sintaks yang betul.

Pertimbangkan contoh berikut:

CREATE PROCEDURE [dbo].[sp_Test1] /* 'b0da56dc-fc73-4c0e-85f7-541e3e8f249d' */
(
@p_CreatedBy UNIQUEIDENTIFIER
)
AS
DECLARE @sql NVARCHAR(4000)
SET @sql ='

DECLARE @p_CreatedBY UNIQUEIDENTIFIER

SELECT 
  DateTime,
  Subject,
  CreatedBy
FROM
(
  SELECT 
    DateTime, Subject, CreatedBy, 
    ROW_NUMBER() OVER(ORDER BY DateTime ) AS Indexing
  FROM
    ComposeMail
  WHERE 
    CreatedBy = @p_CreatedBy /* <--- the problem is in this condition */
) AS NewDataTable
'

EXEC sp_executesql @sql

Apabila melaksanakan prosedur ini tanpa klausa WHERE, ia berfungsi dengan baik. Walau bagaimanapun, apabila klausa WHERE dengan parameter UNIQUEIDENTIFIER ditambah, tiada keputusan dikembalikan. Isunya terletak pada penggunaan parameter yang salah dalam pernyataan SQL dinamik.

Untuk menyelesaikan isu ini, parameter mesti dihantar ke pernyataan sp_executesql. Seperti dalam MSDN:

...
 WHERE 
    CreatedBy = @p
...

EXECUTE sp_executesql @sql, N'@p UNIQUEIDENTIFIER', @p = @p_CreatedBY

Dalam kod yang diubah suai ini, parameter @p digunakan dalam klausa WHERE, dan pernyataan sp_executesql digunakan dengan parameter @p ditetapkan kepada nilai @p_CreatedBY. Ini memastikan bahawa parameter UNIQUEIDENTIFIER dihantar dengan betul kepada pernyataan SQL dinamik.

Atas ialah kandungan terperinci Bagaimana untuk Melewati Parameter dengan Betul dalam Pernyataan SQL Dinamik T-SQL?. 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