Trước tiên, bạn sẽ cần một hàm và một sproc. Các chức năng sẽ chia dữ liệu của bạn và trả về một bảng:
CREATE function IntegerCommaSplit(@ListofIds nvarchar(1000))
returns @rtn table (IntegerValue int)
AS
begin
While (Charindex(',',@ListofIds)>0)
Begin
Insert Into @Rtn
Select ltrim(rtrim(Substring(@ListofIds,1,Charindex(',',@ListofIds)-1)))
Set @ListofIds = Substring(@ListofIds,Charindex(',',@ListofIds)+len(','),len(@ListofIds))
end
Insert Into @Rtn
Select ltrim(rtrim(@ListofIds))
return
end
Tiếp theo, bạn cần một sproc sử dụng rằng:
create procedure GetAdminEvents
@buildingids nvarchar(1000),
@startdate datetime
as
SELECT id,startDateTime, endDateTime From
tb_bookings t INNER JOIN
dbo.IntegerCommaSplit(@buildingids) i
on i.IntegerValue = t.id
WHERE startDateTime <= @fromDate
Cuối cùng, mã của bạn:
[WebMethod]
public MiniEvent[] getAdminEvents(int[] buildingIDs, DateTime startDate)
command.CommandText = @"exec GetAdminEvents";
SqlParameter buildID= new SqlParameter("@buildingIDs", buildingIDs);
Đó đi cách xa hơn những gì câu hỏi của bạn hỏi nhưng nó sẽ làm những gì bạn cần.
Lưu ý: bạn nên chuyển vào bất kỳ thứ gì không phải là int, toàn bộ chức năng cơ sở dữ liệu sẽ không thành công. Tôi để lại lỗi xử lý cho điều đó như là một bài tập cho người dùng cuối.
Nếu bạn đang sử dụng SQL Server 2008, bạn có thể sử dụng tham số có giá trị bảng cho phép bạn chuyển nhiều giá trị trong một tham số. Sau đó bạn sẽ có khả năng thực hiện một phép nối thay vì một "where in()", mặc dù một trong hai sẽ làm việc. [Tham số bảng giá trị] (http://msdn.microsoft.com/en-us/library/bb675163.aspx) – ulty4life
Hmmm ... không nhận thấy rằng câu hỏi đã được hỏi vào tháng 10 năm 2008 lúc đầu. Vì vậy, có lẽ không ... Hy vọng rằng điều này ít nhất sẽ giúp đỡ bất cứ ai đánh này như là một kết quả tìm kiếm. – ulty4life