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


Создание набора строк параметра Table-Valued

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

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

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

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

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

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

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

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

См. также

параметрыTable-Valued (OLE DB)
Использование параметров Table-Valued (OLE DB)