T-SQL: Wie Parameter in dynamischen SQL benutzen?
-
10-07-2019 - |
Frage
Ich habe die folgende dynamische Abfrage, die ohne die WHERE
Klausel fein arbeitet, die UNIQUEIDENTIFIER
erwartet.
Wenn ich es in geben, ich habe nicht ein Ergebnis. Ich habe versucht, CAST
und CONVERT
, aber kein Ergebnis. Ich könnte sein, es falsch zu machen, kann jemand helfen?
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
Lösung
Sie müssen in den Parameter übergeben Sp_executesql. Siehe MSDN für Details .
...
WHERE
CreatedBy = @p
...
EXECUTE sp_executesql @sql, N'@p UNIQUEIDENTIFIER', @p = @p_CreatedBY
Andere Tipps
DECLARE @ParmDefinition NVARCHAR(500)
SET @ParmDefinition = '@p_CreatedBy UNIQUEIDENTIFIER'
EXEC sp_executesql @sql, @ParmDefinition, @p_CreatedBy = @p_CreatedBy
Mehrere Parameter-Syntax. Vielleicht wird dies jemand eine zusätzliche Google-Suche speichern:
exec sp_executesql
@qry,
N'@value1 int, @value2 int, @currentValue int',
@value1 = @value1, @value2 = @value2, @currentValue = @currentValue
Ich bin mir nicht sicher, ob Ihre Variablen werden im String-Format oder binär bevölkert zu werden, aber Sie können die Unique in Ihrer where-Klausel zitieren müssen. Wenn Sie nur das Unique Feld auswählen, kommt es zurück, als String oder Binär?
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow