2015-02-12 3 views
20

Как правильно передать параметры в оператор EXEC sp_executesql?EXEC sp_executesql с несколькими параметрами

Это то, что у меня есть сейчас, но я получаю ошибки:

alter PROCEDURE [dbo].[usp_getReceivedCases] 
    -- Add the parameters for the stored procedure here 
    @LabID int, 
    @RequestTypeID varchar(max), 
    @BeginDate date, 
    @EndDate date 
AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 


declare @statement nvarchar(4000) 

set @statement = N'select SentToLab, 
FROM  dbo.vEmailSent 
WHERE  [email protected] and convert(date,DateSent) >= @BeginDate 
and CONVERT(date, datesent) <= @EndDate 
and RequestType_ID in (@RequestTypeID) 

EXEC sp_executesql @statement,N'@LabID int', @LabID, N'@BeginDate date', @BeginDate,N'@EndDate date', @EndDate, @[email protected] 

END 

RequestTypeID является разделенный запятыми список целых чисел, например, так: «1,2,3,4,5»

вот моя попытка # 2, также не увенчались успехом

declare @statement nvarchar(4000) 

SET @statement =' select SentToLab_ID 

FROM  dbo.vEmailSent 
WHERE  
SentToLab_ID='[email protected]+' and convert(date,DateSent) >= '[email protected] +' 
and CONVERT(date, datesent) <= '[email protected]+' 
and RequestType_ID in ('+ @RequestTypeID+') 
group by FileStream_ID, SentToLab_ID' 


EXEC(@statement) 

типа Операнд столкновение: дата несовместима с Int

+0

http://vyaskn.tripod.com/passing_arrays_to_stored_procedures.htm –

+0

@TabAlleman - с использованием метода 1 i get: Ошибка преобразования при преобразовании значения varchar '+ @ RequestTypeID +' в тип данных int. –

ответ

52

Вот простой пример:

EXEC sp_executesql @sql, N'@p1 INT, @p2 INT, @p3 INT', @p1, @p2, @p3; 

Ваш звонок будет что-то вроде этого

EXEC sp_executesql @statement, N'@LabID int, @BeginDate date, @EndDate date, @RequestTypeID varchar', @LabID, @BeginDate, @EndDate, @RequestTypeID 
+3

Это почти то же самое, когда вам нужно назначить значение переменной с помощью 'sp_executesql' - добавьте' OUTPUT' только в список определения параметров для указанного параметра и самого параметра: 'EXEC sp_executesql @sql, N '@ p1 INT OUTPUT ', @ p1 OUTPUT; ' – gotqn

Смежные вопросы