четверг, 31 марта 2011 г.

Передать таблицу в хранимую процедуру

Нужно описать табличный тип для параметра

CREATE TYPE [ReferenceSet] AS TABLE
(
[ID] UNIQUEIDENTIFIER NOT NULL
);

описать хранимую процедуру

CREATE PROCEDURE [StatusDocument_Create](
@ID UNIQUEIDENTIFIER,
@Services [Core].[ReferenceSet] READONLY)
AS
BEGIN
INSERT INTO
[Record].[ServiceRecord]([Document], [Service])
SELECT
@ID, [ID]
FROM
@Services;
END;

и вызвать её

using (SqlCommand command = CreateCommand())
{
command.CommandText = "[StatusDocument_Update]";
command.CommandType = CommandType.StoredProcedure;

command.Parameters.Add(new SqlParameter("ID", id));

DataTable servicesTable = new DataTable("ReferenceSet");

servicesTable.Columns.Add("ID", typeof(Guid));

foreach (Guid service in services)
{
servicesTable.Rows.Add(service);
}

command.Parameters.Add(new SqlParameter("Services", servicesTable));

command.ExecuteNonQuery();
}