Heim >Datenbank >MySQL-Tutorial >Wie übergebe ich Parameter in dynamischen T-SQL-SQL-Anweisungen korrekt?

Wie übergebe ich Parameter in dynamischen T-SQL-SQL-Anweisungen korrekt?

DDD
DDDOriginal
2025-01-05 03:02:39757Durchsuche

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

Übergabe von Parametern in dynamischen SQL-Anweisungen mit T-SQL

In T-SQL bietet dynamisches SQL eine Möglichkeit, SQL-Anweisungen zu erstellen und auszuführen programmatisch. Bei der Verwendung von Parametern in dynamischem SQL ist es wichtig, die richtige Syntax zu verstehen.

Betrachten Sie das folgende Beispiel:

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

Wenn diese Prozedur ohne WHERE-Klausel ausgeführt wird, funktioniert sie einwandfrei. Wenn jedoch eine WHERE-Klausel mit einem UNIQUEIDENTIFIER-Parameter hinzugefügt wird, werden keine Ergebnisse zurückgegeben. Das Problem liegt in der falschen Verwendung von Parametern in der dynamischen SQL-Anweisung.

Um dieses Problem zu beheben, müssen Parameter an die sp_executesql-Anweisung übergeben werden. Gemäß MSDN:

...
 WHERE 
    CreatedBy = @p
...

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

In diesem geänderten Code wird der Parameter @p in der WHERE-Klausel verwendet und die sp_executesql-Anweisung wird aufgerufen, wobei der @p-Parameter auf den Wert von @p_CreatedBY gesetzt ist. Dadurch wird sichergestellt, dass der Parameter UNIQUEIDENTIFIER korrekt an die dynamische SQL-Anweisung übergeben wird.

Das obige ist der detaillierte Inhalt vonWie übergebe ich Parameter in dynamischen T-SQL-SQL-Anweisungen korrekt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn