Поделиться через


Создание набора строк возвращающего табличное значение параметра

Несмотря на то, что потребители могут предоставить для возвращающих табличные значения параметров любой объект набора строк, типичные объекты наборов строк реализуются для конечных хранилищ данных, и таким образом предоставляют ограниченную производительность. По этой причине поставщик OLE DB собственного клиента SQL Server разрешает пользователям создавать специализированный объект набора строк на основе данных в памяти. Это специальный, объект набора данных в памяти является новым COM-объектом, называемым набором строк возвращающего табличное значение параметра. Он предлагает функциональные возможности, аналогичные набору параметров.

Объекты набора строк возвращающего табличное значение параметра создаются явным образом поставщиком для входных параметров через несколько интерфейсов уровня сеанса. Для одного возвращающего значение параметра существует один объект набора строк. Потребитель может создавать объекты набора строк возвращающего табличное значение параметра либо путем предоставления уже известных метаданных (статический сценарий), либо путем его обнаружения через интерфейсы поставщика (динамический сценарий). Эти два сценария описаны в следующих разделах.

Статический сценарий

Когда сведения о типе известны, поставщик использует ITableDefinitionWithConstraints::CreateTableWithConstraints для создания объекта набора строк, соответствующего возвращающему табличное значение параметру.

Поле guid (параметр pTableID) содержит специальный идентификатор GUID (CLSID_ROWSET_TVP). Элемент pwszName содержит имя типа возвращающего табличное значение параметра, который потребитель хочет создать. Поле eKind будет установлено в значение DBKIND_GUID_NAME. Данное имя требуется при использовании нерегламентированной инструкции SQL. При вызове процедуры имя является необязательным.

Для статистической обработки потребитель передает параметр pUnkOuter под управлением IUnknown.

Свойства объекта набора строк возвращающего табличное значение параметра доступны только для чтения, так что установка потребителем каких-либо свойств в rgPropertySets не предусмотрена.

Для элемента rgPropertySets каждой структуры DBCOLUMNDESC потребитель может указать дополнительные свойства для каждого столбца. Эти свойства принадлежат набору свойств DBPROPSET_SQLSERVERCOLUMN. Они позволяют указать для каждого столбца вычисленные настройки и настройки по умолчанию. Также они поддерживают существующие свойства столбца, например, допустимость значений NULL и идентификатор.

Для получения соответствующих сведений от объекта набора строк возвращающего табличные значения параметра потребитель использует IRowsetInfo::GetProperties.

Для получения сведения о состоянии NULL, уникальном, вычисленном и обновленном состоянии для каждого столбца потребитель использует IColumnsRowset::GetColumnsRowset или IColumnsInfo::GetColumnInfo. Данные методы предоставляют подробные сведения о каждом столбце набора строк возвращающего табличные значения параметра.

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

Динамический сценарий

Когда потребитель не имеет сведений о типе, для создания экземпляров набора строк возвращающего табличные значения параметра следует использовать IOpenRowset::OpenRowset. Потребитель должен предоставить поставщику имя типа.

В этом сценарии поставщик получает сведения о типе объекта набора строк возвращающего табличные значения параметра из сервера от лица потребителя.

Параметры pTableID и pUnkOuter должны устанавливаться аналогично статическому сценарию. После этого поставщик OLE DB собственного клиента SQL Server получает от сервера сведения о типе (сведения о столбцах и ограничениях), и возвращает объект набора строк возвращающего табличные значения параметра через параметр ppRowset. Данная операция требует связи с сервером, и таким образом не выполняется также хорошо, как статический сценарий. Динамический сценарий работает только с параметризованными вызовами процедур.