2015-02-12 13 views
20

Làm thế nào để chuyển các tham số cho câu lệnh EXEC sp_executesql chính xác?EXEC sp_executesql với nhiều tham số

Đây là những gì tôi có bây giờ, nhưng tôi nhận được lỗi:

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 là một dấu phẩy phân cách danh sách các số nguyên, như vậy: "1,2,3,4,5"

ở đây là cố gắng của tôi # 2, cũng không thành công

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) 

loại Operand đụng độ: ngày không tương thích với int

+0

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

+0

@TabAlleman - sử dụng phương pháp 1 tôi nhận được: Chuyển đổi không thành công khi chuyển đổi giá trị varchar '+ @ RequestTypeID +' thành kiểu dữ liệu int. –

Trả lời

52

Dưới đây là một ví dụ đơn giản:

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

Cuộc gọi của bạn sẽ là một cái gì đó như thế này

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

Nó gần như giống nhau khi bạn cần gán giá trị biến bằng cách sử dụng 'sp_executesql' - chỉ thêm' OUTPUT' vào danh sách định nghĩa tham số cho tham số đã chỉ định và tham số: 'EXEC sp_executesql @sql, N '@ p1 INT OUTPUT ', @ p1 OUTPUT; ' – gotqn

Các vấn đề liên quan