2009-06-24 15 views
13

Mam następujące zapytanie dynamiczne, które działa poprawnie bez klauzuli WHERE, która oczekuje UNIQUEIDENTIFIER.T-SQL: Jak używać parametrów w dynamicznym SQL?

Kiedy przekazuję, nie otrzymuję wyniku. Próbowałem CAST i CONVERT, ale bez rezultatu. Może robię to źle, czy ktoś może pomóc?

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 

Odpowiedz

22

Musisz przekazać parametry do sp_executesql. See MSDN for details.

... 
WHERE 
    CreatedBy = @p 
... 

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

Próbowałem tego, to nie działa dając mi błąd śledzenia "Procedura oczekuje parametru" parametry @ "typu" ntext/nchar/nvarchar "." –

+3

Utwórz ciąg NCHAR, dodając wyrażenie 'N': EXECUTE sp_executesql @sql, N '@ p UNIQUEIDENTIFIER', ... –

0

Nie jestem pewien, czy zmienna jest uzyskiwanie zaludnionych w formacie binarnym lub strun, ale może trzeba zacytować uniqueidentifier w klauzuli WHERE. Jeśli po prostu wybierzesz pole uniqueidentifier, czy będzie ono zwracane jako ciąg znaków lub plik binarny?

+0

Próbowałem nawet przekazać dokładny uniqueidentifier z cudzysłowami, ale podaje im niepoprawną składnię. każdy przykład jak to zrobić. –

+0

poczekaj chwilę ... czy nie powinieneś wstawiać nazwy var poza cytatami? więc wzdłuż linii WHERE CreatedBy = '+ @p_CreatedBy +') Myślę, że w ten sposób faktycznie literał ciąg do sql. –

3
DECLARE @ParmDefinition NVARCHAR(500) 
SET @ParmDefinition = '@p_CreatedBy UNIQUEIDENTIFIER' 

EXEC sp_executesql @sql, @ParmDefinition, @p_CreatedBy = @p_CreatedBy 
Powiązane problemy