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
War es hilfreich?

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
scroll top