Jak mogę zbudować procedurę przechowywaną, która pozwoli mi przejść (na przykład) jest @IDList
tak, że mogę napisać:zdaniu „w” liście poprzez procedury przechowywanej
Select * from Foo Where ID in @IDList
Czy to wykonalne?
Jak mogę zbudować procedurę przechowywaną, która pozwoli mi przejść (na przykład) jest @IDList
tak, że mogę napisać:zdaniu „w” liście poprzez procedury przechowywanej
Select * from Foo Where ID in @IDList
Czy to wykonalne?
zobaczyć tę odpowiedź ...
Zapisz indywidualne identyfikatory w tabeli B, wszystkie z tym samym "kluczem" (prawdopodobnie GUID).
Następnie zapytanie przeciwko tabeli A obejmowałyby
where ID in (select ID from B where key = @TempKey)
(Można następnie usuń klucze jeśli zakończeniu pracy z nimi. Lub timestamp je i mają sql zadanie zrobić to później).
Plusy:
Wady:
Z SQL2005 i powyżej można wysłać tablicę bezpośrednio z kodu.
Najpierw utwórz niestandardowy typ
CREATE TYPE Array AS table (Item varchar(MAX))
niż procedura przechowywana.
CREATE PROCEDURE sp_TakeArray
@array AS Array READONLY
AS BEGIN
Select * from Foo Where ID in (SELECT Item FROM @array)
END
Potem zadzwoń z kodu przechodzącą w DataTable jako tablicy
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();
Dotyczy tylko serwera Sql 2008. –
której bazy danych używasz? Z jakiego języka przekazujesz listę? – bstoney