SQL Server 2008 Получить пользовательский тип таблицы в хранимой процедуре CLR? - PullRequest
1 голос
/ 30 декабря 2010

У меня есть табличные параметры в SQL Server 2008, например:

CREATE TYPE UserType AS TABLE
(
    UserID int,
    UserName nvarchar(100),
    UserPassword nvarchar(100)
)

Можно ли каким-либо образом использовать этот тип в моей хранимой процедуре SQL CLR?Например, в качестве входного параметра?

[SqlProcedure]
public static void SomeFunction (/* what type should be here ?? */)
{
     //
}

Ответы [ 3 ]

1 голос
/ 30 декабря 2010

Табличные функции Transact-SQL материализуют результаты вызова функции в промежуточную таблицу . Поскольку они используют промежуточную таблицу, они могут поддерживать ограничения и уникальные индексы для результатов. Эти функции могут быть чрезвычайно полезны при возврате больших результатов.

Напротив, табличные функции CLR представляют собой потоковую альтернативу. Не требуется, чтобы весь набор результатов материализовался в одной таблице . Объект IEnumerable, возвращаемый управляемой функцией, напрямую вызывается планом выполнения запроса, который вызывает табличную функцию, а результаты используются в пошаговом режиме. Эта потоковая модель гарантирует, что результаты могут быть использованы сразу после того, как будет доступна первая строка, вместо ожидания заполнения всей таблицы. Это также лучшая альтернатива, если вы возвращаете очень большое количество строк, потому что они не должны быть материализованы в памяти в целом. Например, управляемая табличная функция может использоваться для анализа текстового файла и возврата каждой строки в виде строки.

Ссылка

1 голос
/ 30 декабря 2010

Я не верю, что ты можешь. Страница Отображение данных параметров CLR указывает, что для типа данных таблицы нет эквивалентов (SQL Server CLR или .NET Framework).


Или, чтобы процитировать ссылку @ 1006 * Яни :

Пользовательский тип таблицы не может быть передан в качестве табличного параметра или возвращен из управляемой хранимой процедуры или функции, выполняющейся в процессе SQL Server

0 голосов
/ 30 декабря 2010

Попробуйте использовать класс вместо табличного параметра:

public class UserType
{
    int UserID { get; set; }
    string UserName { get; set; }
    string UserPassword { get; set; }
)

[SqlProcedure]
public static void SomeFunction (UserType type)
{
     //
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...