Comment puis-je construire une procédure stockée qui me permettra de passer (par exemple) un @IDList
afin que je puisse écrire:« dans » la liste via la procédure stockée
Select * from Foo Where ID in @IDList
Est-ce faisable?
Comment puis-je construire une procédure stockée qui me permettra de passer (par exemple) un @IDList
afin que je puisse écrire:« dans » la liste via la procédure stockée
Select * from Foo Where ID in @IDList
Est-ce faisable?
voir cette réponse ...
Ecrivez les identifiants individuels dans la table B, tous avec la même "clé" (un GUID peut-être).
Ensuite, votre requête sur le tableau A comprendrait
where ID in (select ID from B where key = @TempKey)
(Vous pourriez alors supprimer les clés si vous avez terminé avec eux. Ou, les horodater et ont un emploi sql faire plus tard.)
Plus:
Moins:
Avec SQL2005 et au-dessus, vous pouvez envoyer un tableau à partir du code directement.
d'abord créer un type personnalisé
CREATE TYPE Array AS table (Item varchar(MAX))
Que la procédure stockée.
CREATE PROCEDURE sp_TakeArray
@array AS Array READONLY
AS BEGIN
Select * from Foo Where ID in (SELECT Item FROM @array)
END
Ensuite, appelez à partir du code qui passe dans un DataTable que le tableau
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();
Ceci s'applique uniquement à Sql Server 2008. –
Quelle base de données utilisez-vous? De quelle langue passez-vous la liste? – bstoney