Đúng vậy, tôi cần cung cấp cho bạn một số điểm trở lại đầu tiên.
Khi bạn cho phép tham số SSRS chọn nhiều giá trị, Việc chọn nhiều giá trị sẽ tạo ra một chuỗi giá trị được phân tách bằng dấu phẩy thành một chuỗi
'value1,value2,value3'
Để kiểm tra các giá trị trong một chuỗi bằng cách sử dụng IN
toán tử chúng ta cần các chuỗi được nối với dấu phẩy như thế này ....
'value1','value2','value3'
Proc của bạn
Bây giờ trong chương trình của bạn khi bạn chèn các giá trị một cách rõ ràng, nó sẽ chèn nhiều giá trị vào bảng của bạn.
INSERT INTO Table_Value_Param
VALUES ('value1'), --<-- 1st value/Row
('value2'), --<-- 2nd Value/Row
('value3') --<-- 3rd Value/Row
và điều này trả lại cho bạn kết quả mong đợi như khi bên trong quy trình của bạn, bạn thực hiện một câu lệnh như
SELECT *
FROM Table_Name
WHERE ColumnName IN (SELECT ColumnName
FROM Table_Value_Param)
Mặt khác, khi bạn cố gắng chèn vào bảng bằng cách sử dụng thông số báo cáo SSRS, bảng của bạn sẽ chèn giá trị như
INSERT INTO Table_Value_Param
VALUES ('value1,value2,value3') --<-- One Row/Value containing all the values comma separated
Giải pháp
Tạo TVP
trong tình huống này không thực sự hữu ích, Điều tôi làm là sử dụng dbo.Split()
chức năng bên trong quy trình của tôi.
Bạn có thể tìm thấy nhiều định nghĩa cho hàm phân tách trực tuyến, đối với một số định nghĩa thú vị, hãy xem tại đây Split Function equivalent in tsql?
Khi bạn đã tạo hàm tách này, chỉ cần sử dụng hàm này bên trong định nghĩa thủ tục của bạn, bạn thậm chí không cần các tham số có giá trị Bảng sau đó.
Một cái gì đó như thế này ...
SELECT *
FROM Table_Name
WHERE ColumnName IN (
SELECT Value
FROM dbo.Split(@Report_Param, ',')
)