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

Cách chuyển mảng chuỗi trong tham số SQL sang mệnh đề IN trong SQL

Giới thiệu :Mặc dù OP đã chấp nhận một câu trả lời, nhưng tôi nghĩ tốt hơn là nên chia sẻ kinh nghiệm của mình, bởi vì tôi tin rằng cách tiếp cận mà tôi sắp đưa ra sẽ tốt hơn thì người đó đã chấp nhận.

Tôi thấy rằng cách tốt nhất để chuyển Mảng vào cơ sở dữ liệu máy chủ sql là sử dụng user defined table type và c # DataTable Trong trường hợp của bạn, vì bạn muốn chuyển một mảng chuỗi có một chiều, nên khá dễ dàng:

Trước tiên, bạn cần tạo một loại bảng do người dùng xác định trong cơ sở dữ liệu của mình:

 CREATE TYPE dbo.StringArray As Table (
    StringItem varchar(50) -- you can use any length suited for your needs
)

Sau đó, bạn cần tạo một dữ liệu trong mã c # của mình:

DataTable dt = new DataTable();
dt.Columns.Add("StringItem", typeof(System.String));

Sau đó, thay đổi quy trình đã lưu trữ của bạn để chấp nhận kiểu dữ liệu này làm tham số:

ALTER proc [dbo].[sp_Accessories]
(  
@Mode varchar(50)=null,
@id int=null,
@brand varchar(50)=null,
@department varchar(MAX)=null,
@season varchar(50)=null,
@groupname varchar(MAX)=null,
@styles varchar(50)=null,
@combo dbo.StringArray Readonly=null, -- NOTE THIS CHANGE
@combo_color nvarchar(max)=null,
)
as
if @Mode='getsizewise'
begin
select Sizes,SUM(Quantity) from tbl_SizeBreakup where ([email protected]) and
([email protected]) and ([email protected]) and ([email protected]) and ([email protected]) 
and ([email protected]) and (Total_Add_Qty='Total Quantity') 
and comboColumn in(select StringItem from @Combo) -- NOTE THIS CHANGE
Group By Sizes
end

Sau đó, bạn cần chuyển đổi mảng chuỗi thành DataTable trong mã c # của bạn.

foreach (string s in YourStringArray) {
    string[] temp = {s};
    dt.Rows.Add(temp);
}

Thêm DataTable làm tham số vào thủ tục được lưu trữ:

System.Data.SqlClient.SqlParameter sp = new Data.SqlClient.SqlParameter();
sp.SqlDbType = SqlDbType.Structured;
sp.Value = dt;
sp.ParameterName = "@Combo";
cmd.Parameters.Add(sp);

Xây dựng và chạy.

Cách tiếp cận này sẽ có hiệu suất tốt hơn khi sử dụng hàm sql do người dùng xác định và cũng có thể được sử dụng cho các kiểu dữ liệu khác nhau. đây là một trong những lý do tốt nhất để sử dụng nó:Hãy xem xét một tình huống mà bạn cần chuyển một mảng Ngày:cách tiếp cận csv yêu cầu sql để chuyển đổi từng chuỗi thành một ngày, trong khi với cách tiếp cận này, bạn có thể chỉ cần chuyển các ngày như hiện tại, mà không cần chuyển đổi chúng thành chuỗi và sau đó quay lại ngày. Ngoài ra, bạn có thể chuyển mảng 2 thứ nguyên hoặc từ điển, tất cả những gì bạn phải làm là tạo kiểu dữ liệu thích hợp do người dùng xác định trong cơ sở dữ liệu sql của bạn.

Lưu ý:mã được viết trực tiếp tại đây, có thể có một số lỗi chính tả.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Các cách khắc phục lỗi máy chủ SQL phát hiện lỗi I / O dựa trên tính nhất quán logic

  2. Cách chèn dấu ngắt dòng trong chuỗi VARCHAR / NVARCHAR của SQL Server

  3. SQL Server:Cách chọn tất cả các ngày trong một phạm vi ngày ngay cả khi không có dữ liệu nào tồn tại trong một số ngày

  4. Chỉ chèn một hàng nếu nó chưa có ở đó

  5. Xóa danh tính khỏi một cột trong bảng