Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Chuyển nhiều tham số giá trị trong SSRS tới quy trình được lưu trữ

Đú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, ',')
                       ) 


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sự khác biệt giữa datetime và timestamp là gì

  2. MSSQL2008 - Pyodbc - SQL trước đây không phải là một truy vấn

  3. Giao dịch ngoại lệ ném ngoại lệ nền tảng này không hỗ trợ các giao dịch phân tán trong khi mở đối tượng kết nối

  4. Có Rủi ro Bảo mật Liên quan đến Giám sát Đám mây Spotlight không?

  5. Cách lấy danh sách tất cả cơ sở dữ liệu từ máy chủ sql trong một hộp kết hợp bằng c # .net