Nếu có thể, không sử dụng varchar cho những việc này, hãy sử dụng bảng tham số có giá trị thay vào đó.
Để sử dụng tham số giá trị được lập bảng, trước tiên bạn nên khai báo loại bảng do người dùng xác định:
CREATE TYPE IntList As Table
(
IntValue int
)
Sau đó, thay đổi thủ tục đã lưu trữ của bạn để chấp nhận biến này thay vì nvarchar:
create proc Sp_ReturnPrdoucts
@BrandIds dbo.IntList readonly -- Note: readonly is a must!
AS
BEGIN
SELECT *
FROM tbl_Products as p
join tbl_Brands b on p.ProductBrandId=b.BrandId
join @BrandIds ON(b.BrandId = IntValue)
END
Vấn đề là IN()
toán tử mong đợi một danh sách các biến được phân tách bằng dấu phẩy, trong khi bạn cung cấp một biến duy nhất mà giá trị của nó là một chuỗi được phân tách bằng dấu phẩy.
Nếu bạn không thể sử dụng một tham số có giá trị bảng, bạn có thể sử dụng một hàm nối chuỗi trong sql để chuyển đổi giá trị của varchar thành một bảng ints. có rất nhiều công cụ phân tách ngoài kia, tôi khuyên bạn nên đọc bài viết này trước khi chọn một.