2015-02-12 17 views
20

Come passare correttamente i parametri all'istruzione EXEC sp_executesql?EXEC sp_executesql con più parametri

Questo è quello che ho adesso, ma sto ottenendo gli errori:

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 è un elenco delimitato da virgole di numeri interi, in questo modo: "1,2,3,4,5"

qui è la mia prova # 2, anche senza successo

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) 

tipo di operando scontro: la data non è compatibile con int

+0

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

+0

@TabAlleman - metodo che utilizza 1 ottengo: Conversione non riuscita durante la conversione del valore varchar '+ @ RequestTypeID +' nel tipo di dati int. –

risposta

52

Ecco un semplice esempio:

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

la chiamata sarà qualcosa di simile

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

È quasi lo stesso quando è necessario assegnare un valore di variabile usando 'sp_executesql' - aggiungi solo' OUTPUT' all'elenco di definizione dei parametri per il parametro specificato e il parametro stesso: 'EXEC sp_executesql @sql, N '@ p1 INT OUTPUT ', @ p1 OUTPUT; ' – gotqn