Я могу найти лот еще ссылки . Однако это все для передачи табличных параметров в процедуры TSQL, так что это бесполезно.
Однако я пришел к выводу, что это невозможно. Во-первых, существует список отображений между типами CLR и SQL. Для табличных типов сопоставление отсутствует, поэтому следующее не работает, например:
[SqlProcedure]
public static void StoredProcedure(DataTable tvp, out int sum)
{
return 42;
}
, а затем
CREATE TYPE MyTableType AS TABLE
(
Id INT NOT NULL PRIMARY KEY,
[Count] INT NOT NULL
)
GO
CREATE ASSEMBLY ClrTest FROM '<somePath>'
GO
CREATE PROCEDURE ClrTest
AS EXTERNAL NAME ClrTest.StoredProcedures.StoredProcedure
GO
Какой бы тип вы ни использовали (DataTable
, DbDataReader
, IEnumerable
), вызов CREATE PROCEDURE
продолжает генерировать ошибку 6552: CREATE PROCEDURE для "ClrTest" не выполнен, поскольку типы T-SQL и CLR для параметр "@tvp" не совпадает.
Во-вторых, документация на странице, на которую вы ссылаетесь, гласит: Пользовательский тип таблицы не может быть передан в качестве табличного параметра или возвращен из управляемой хранимой процедуры или функции, выполняемой в SQL. Серверный процесс.
Кажется, я нигде не могу найти, как создать пользовательский тип таблицы в C #, но это также кажется тупиком.
Может быть, вы можете задать свой вопрос где-нибудь на форуме Microsoft. Все еще странно, что они упоминают табличные параметры на странице sproc CLR, но никогда не объясняют, как это реализовать. Если вы найдете какое-либо решение, я хотел бы знать.