Ü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!