Übergabe von Parametern in dynamischem T-SQL mit sp_executesql
In dynamischem T-SQL kann die Übergabe von Parametern an Abfragen, die mit sp_executesql ausgeführt werden, eine Herausforderung sein . Dieser Artikel befasst sich mit einem häufigen Problem bei der Verwendung von dynamischem SQL mit WHERE-Klauseln, die UNIQUEIDENTIFIER-Parameter erwarten.
Betrachten Sie das folgende Beispiel, bei dem der sp_executesql-Anweisung die erforderliche Parameterbindung fehlt:
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
Wann Wenn diese Prozedur ausgeführt wird, schlägt die Bedingung der WHERE-Klausel fehl, da der Parameter @p_CreatedBy nicht an das dynamische SQL gebunden ist Abfrage.
Um dieses Problem zu beheben, müssen Parameter explizit an sp_executesql übergeben werden. Laut MSDN lautet die korrekte Syntax:
EXECUTE sp_executesql @sql, N'@p UNIQUEIDENTIFIER', @p = @p_CreatedBY
Dadurch wird sichergestellt, dass der Parameter @p_CreatedBy dem Parameter @p in der dynamischen SQL-Anweisung zugewiesen wird, sodass die WHERE-Klausel die Bedingung korrekt auswerten kann.
Das obige ist der detaillierte Inhalt vonWie übergebe ich UNIQUEIDENTIFIER-Parameter in dynamischem T-SQL mithilfe von sp_executesql korrekt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!