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


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

Несмотря на то, что потребители могут предоставить для возвращающих табличные значения параметров любой объект набора строк, типичные объекты наборов строк реализуются для конечных хранилищ данных и таким образом предоставляют ограниченную производительность. По этой причине поставщик SQL Server Native Client OLE DB позволяет потребителям создавать специализированный объект набора строк поверх данных в памяти. Этот специальный объект набора строк в памяти является новым 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. Потребитель получает объект набора строк возвращающего табличное значение параметра из поставщика SQL SERVER NATIVE CLIENT OLE DB с помощью выходного параметра ppRowset.

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

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

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

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

См. также:

Возвращающие табличное значение параметры (OLE DB)
Использование возвращающих табличные значения параметров (OLE DB)