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


Создание набора строк с табличным значением параметра в собственном клиенте SQL Server

Применимо: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure azure Synapse Analytics Analytics Platform System (PDW)

Несмотря на то, что потребители могут предоставить для возвращающих табличные значения параметров любой объект набора строк, типичные объекты наборов строк реализуются для конечных хранилищ данных и таким образом предоставляют ограниченную производительность. По этой причине поставщик 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 . Данная операция требует связи с сервером, поэтому выполняется не так быстро, как статический сценарий. Динамический сценарий работает только с параметризованными вызовами процедур.

См. также

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