Come posso costruire una stored procedure che mi permetterà di passare (ad esempio) un @IDList
modo che io possa scrivere:passaggio di un "in" lista tramite stored procedure
Select * from Foo Where ID in @IDList
È questo fattibile?
Come posso costruire una stored procedure che mi permetterà di passare (ad esempio) un @IDList
modo che io possa scrivere:passaggio di un "in" lista tramite stored procedure
Select * from Foo Where ID in @IDList
È questo fattibile?
vedere questa risposta ...
Scrivi i singoli ID nella tabella B, tutti con la stessa "chiave" (forse un GUID).
Quindi, la query contro il tavolo Una includerebbe
where ID in (select ID from B where key = @TempKey)
(Si potrebbe quindi eliminare le chiavi se si è finito con loro. Oppure, li timestamp e hanno un lavoro sql farlo in seguito.)
Pro:
Contro:
Con SQL2005 e soprattutto è possibile inviare una matrice da codice direttamente.
Innanzitutto creare un tipo personalizzato
CREATE TYPE Array AS table (Item varchar(MAX))
Than la stored procedure.
CREATE PROCEDURE sp_TakeArray
@array AS Array READONLY
AS BEGIN
Select * from Foo Where ID in (SELECT Item FROM @array)
END
Quindi chiamare dal codice di passaggio in un DataTable, come la matrice
DataTable items = new DataTable();
items.Columns.Add("Item", typeof(string));
DataRow row = items.NewRow();
row.SetField<string>("Item", <item to add>);
items.Rows.Add(row);
SqlCommand command = new SqlCommand("sp_TakeArray", connection);
command.CommandType = CommandType.StoredProcedure;
SqlParameter param = command.Parameters.Add("@Array", SqlDbType.Structured);
param.Value = items;
param.TypeName = "dbo.Array";
SqlDataReader reader = command.ExecuteReader();
È applicabile solo al server Sql 2008. –
quale database stai usando? Da quale lingua stai passando la lista? – bstoney