в самом ответе.
ользую EF-код в первую очередь, и я создал хранимую процедуру с помощью миграции следующим образом:
public override void Up()
{
Sql(@"CREATE TYPE IdsList AS TABLE
(
Id Int
)
GO
Create Procedure getChildIds(
@IdsList dbo.IdsList ReadOnly
)
As
Begin
WITH RecursiveCTE AS
(
SELECT Id
FROM dbo.PhysicalObjects
WHERE ParentId in (Select * from @IdsList)
--Where Id=108
UNION ALL
SELECT t.Id
FROM dbo.PhysicalObjects t
INNER JOIN RecursiveCTE cte ON t.ParentId = cte.Id
)
SELECT * FROM RecursiveCTE
End");
}
public override void Down()
{
Sql(@"Drop Type IdsList
Go
Drop Procedure getChildIds");
}
Теперь, если я иду в студию управления сервером sql и выполняю следующие сценарии:
Declare @Ids dbo.IdsList
Insert into @Ids
SELECT 1
Exec getChildIds @Ids
Он будет выполнен успешно, но сейчас я пытаюсь выполнить эту хранимую процедуру следующим образом:
var idsList = new SqlParameter {ParameterName = "idsList", Value = new int[] { 1,2,3,4,5} };
var idParams = new SqlParameter("idParams", SqlDbType.Structured)
{
Direction = System.Data.ParameterDirection.Output
};
var results = dbContext.Database.SqlQuery<int>("getChildIds @idsList, @idParams out", idsList,idParams) ;
var idsResult = (List<int>)idParams.Value;
Ничего не возвращает.
Итак, как мне выполнить хранимую процедуру с параметрами ввода и вывода типа Table?