Comment puis-je construire une procédure stockée qui me permettra de passer (par exemple) un @IDList
afin que je puisse écrire:
Select * from Foo Where ID in @IDList
Est-ce faisable?
voir cette réponse ...
procédure stockée T-SQL qui accepte plusieurs valeurs d'identifiant
Avec SQL2005 et plus, 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
Puis appelez du code passant dans un jeu de données comme 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();
Écrivez les identifiants individuels au tableau B, tous avec la même "clé" (A GUID peut-être).
[.____] alors, votre requête contre la table A comprendrait
where ID in (select ID from B where key = @TempKey)
(Vous pourriez ensuite supprimer les clés si vous avez fini avec elles. Ou, horodatage et avoir un travail SQL le faire plus tard.)
Avantages :
Inconvénients :