В случае, если вы используете Sql Server 2008, вы можете изучить еще один вариант: Параметры таблицы значений
В следующем примере (адаптированный пример из Plamen Ratchev ) показано, как можно использовать табличные параметры в сервере Sql
Вы можете использовать следующее в базе данных:
-- User-defined table type
CREATE TYPE LookupCodeTable
AS TABLE (
lookupcode varchar(10)
)
GO
-- Procedure with table valued parameter
-- Must use the READONLY clause
CREATE PROCEDURE SelectLoansByCodes
@lookupCodes LookupCodeTable READONLY
AS
Select * from Loans
inner join @lookupCodes l on Loans.loancode like l.lookupcode + '%'
GO
Это пример использования с сервера sql
-- Sample usage from Sql Server
CREATE TABLE Loans (
loan_nbr INT PRIMARY KEY,
loancode varchar(50),
loan_amount DECIMAL(15, 2));
-- Initialize the table variable with data
INSERT INTO Loans
VALUES (1, 'A120080101', 10000.00),
(2, 'A120080203', 15000.00),
(3, 'A220080315', 25000.00),
(4, 'A120080101', 30000.00),
(5, 'A320080203', 45000.00),
(6, 'A520080315', 55000.00);
GO
DECLARE @myLookupcodes LookupCodeTable;
-- Initialize the table variable with data
INSERT INTO @myLookupcodes
VALUES ('A1'), ('A2'), ('A5')
EXEC SelectLoansByCodes @lookupCodes = @myLookupCodes;
И пример использования из вашего приложения:
var loans = new DataTable();
loans.Columns.Add("lookupcode", typeof(string), 10);
using(SqlCommand cmd = new SqlCommand("SelectLoansByCodes", conn)
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("Loans", loans);
SqlDataReader reader =
cmd.ExecuteReader();
while (reader.Read())
{
Console.WriteLine(String.Format("{0}, {1}, {2}", reader[0], reader[1], reader[2]));
}
}
и указатель на использование табличных параметров (с функциями) с платформой Entity:
http://blogs.msdn.com/b/efdesign/archive/2009/01/07/model-defined-functions.aspx