Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí na:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytický platformový systém (PDW)
SQL databáze v Microsoft Fabric
OLE DB Driver pro SQL Server podporuje dva modely, které uživatel umožňuje specifikovat data pro tabulkově hodnotové řádky parametrů: push model a pull model.
Poznámka:
Sloupec parametrů s tabulkovými hodnotami musí mít buď nevýchozí hodnoty ve všech řádcích, nebo výchozí hodnoty ve všech řádcích. Není možné mít výchozí hodnoty v některých řádcích, ale v jiných ne. Proto jsou v tabulkových parametrech povolené pouze stavové hodnoty pro sloupcová data řádků parametrů s tabulkovými hodnotami DBSTATUS_S_ISNULL a DBSTATUS_S_OK. DBSTATUS_S_DEFAULT povede k selhání a hodnota stavu bound bude nastavena na DBSTATUS_E_BADSTATUS.
Push model (načítá všechna Table-Valued parametrová data do paměti)
Model push je podobný použití sad parametrů (tj. parametru DBPARAMS v ICommand::Execute). Push model se používá pouze tehdy, pokud jsou objekty řádkové sady parametrů s tabulkovými hodnotami používány bez přizpůsobené implementace IRowset rozhraní. Push model se doporučuje, když je počet řádků v řádku parametrů s tabulkovou hodnotou malý a neočekává se, že by aplikaci vyvíjel nadměrnou paměťovou zátěž. To je jednodušší než pull model, protože nevyžaduje od spotřebitelské aplikace více funkcí, než je běžné v běžných aplikacích OLE DB.
Očekává se, že spotřebitel poskytne poskytovateli všechna tabulková parametrová data před vykonáním příkazu. Pro poskytnutí dat uživatel vyplní tabulkový objekt řádkové sady parametrů pro každý parametr tabulkové hodnoty. Objekt řádku s parametrem s tabulkovou hodnotou vystavuje operace Insert, Set a Delete sady řádků, které uživatel použije k manipulaci s tabulkovými parametry. Poskytovatel načte data z tohoto objektu řádku s tabulkovou hodnotou při vykonání.
Když je uživateli poskytnut objekt řádku s hodnotou parametru s tabulkovou hodnotou, může jej uživatel zpracovat jako objekt řádkové sady. Spotřebitel může získat informace o typu každého sloupce (typ, maximální délka, přesnost a měřítko) pomocí rozhraní rozhraní IColumnsInfo::GetColumnInfo nebo IColumnsRowset::GetColumnsRowset. Spotřebitel pak vytvoří přístupový modul, který specifikuje vazby pro data. Dalším krokem je vložení řádků dat do řádku parametrů s tabulkovými hodnotami. To lze provést pomocí IRowsetChange::InsertRow. IRowsetChange::SetData nebo IRowsetChange::D eleteRows lze také použít na objekt řádku s parametrem s tabulkovou hodnotou, pokud je potřeba data upravovat. Tabulkově hodnotené objekty řádků parametrů jsou počítány odkazy, podobně jako objekty proudu.
Pokud je použit IColumnsRowset::GetColumnsRowset, budou následně volat metody IRowset::GetNextRows, IRowset::GetData a IRowset::ReleaseRows na objektu řádku výsledného sloupce.
Po zahájení příkazu ovladačem OLE DB pro SQL Server budou hodnoty parametrů v tabulce načteny z tohoto objektu řádku parametru s tabulkovou hodnotou a odeslány serveru.
Push model vyžaduje od uživatele minimální práci, ale využívá více paměti než pull model, protože všechna tabulková parametrová data musí být v době vykonávání v paměti.
Pull model (získání Table-Valued parametrů na vyžádání od spotřebitele)
Model pull je užitečný ve dvou scénářích:
Streamovat řádky.
Pokud je jako hodnota parametru v tabulce použita sada řádků od jiného poskytovatele.
V pull modelu poskytuje spotřebitel data poskytovateli na vyžádání. Použijte tento přístup, pokud má vaše aplikace mnoho vložených dat, a tabulková řádková data v řádku parametrů v paměti by vedla k nadměrnému přístupu do paměti. Pokud je použito více poskytovatelů OLE DB, spotřebitelský pull model umožňuje uživateli zadat jakýkoli objekt řádku jako hodnotu parametru v tabulce.
Pro použití pull modelu musí spotřebitelé poskytnout vlastní implementaci objektu v sadě řádků. Při použití pull modelu s tabulkovými řádky parametrů (CLSID_ROWSET_TVP) je uživatel povinen agregovat objekt řádku s hodnotou v tabulce, který poskytovatel zpřístupňuje prostřednictvím metody ITableDefinitionWithConstraints::CreateTableWithConstraints nebo metody IOpenRowset::OpenRowset. Očekává se, že objekt spotřebitele přepíše pouze implementaci rozhraní IRowset. Musíte přepsat následující funkce:
IRowset::GetNextRows
IRowset::AddRefRows
IRowset::GetData
IRowset::ReleaseRows
IRowset::RestartPosition
OLE DB Driver pro SQL Server bude číst jeden nebo více řádků najednou z objektu řádkové sady spotřebitele, aby podpořil chování streamování v parametrech s hodnotami tabulky. Například uživatel může mít tabulkově hodnotová data řádků parametrů na disku (ne v paměti) a může implementovat možnost čtení dat z disku, když to vyžaduje OLE DB Driver for SQL Server.
Spotřebitel bude komunikovat svůj datový formát do OLE DB Driver for SQL Server pomocí IAccessor::CreateAccessor na objektu řádkové sady s hodnotou tabulky. Při čtení dat ze spotřebitelského bufferu poskytovatel ověřuje, že všechny zapisovatelné i nevýchozí sloupce jsou dostupné alespoň přes jeden přístupový handle, a používá příslušné handle ke čtení dat sloupců. Aby se předešlo nejednoznačnosti, měla by existovat jednoznačná korespondence mezi sloupcem řádků s parametrem s tabulkovou hodnotou a vazbou. Duplikátní vazby na stejný sloupec povedou k chybě. Také se očekává, že každý accessor bude mít iOrdinal člena DBBindings v pořadí. Volání IRowset::GetData bude mít tolik volání, kolik je přístupných členů na řádek, a pořadí volání bude založeno na pořadí iOrdinal hodnoty od nižších k vyšším hodnotám.
Očekává se, že poskytovatel implementuje většinu rozhraní vystavených objektem řádku s hodnotou tabulky parametrů. Spotřebitel implementuje objekt sady řádků s minimálním počtem rozhraní (IRowset). Kvůli slepé agregaci budou zbývající povinná rozhraní objektů řádkové sady implementována objektem řádkové sady s tabulkovou hodnotou.
Pro jakýkoli jiný objekt sady řádků, například objekty pro daného poskytovatele OLE DB, musí uživatelem poskytnutá sada řádků implementovat všechna povinná rozhraní pro objekty řádků, jak je specifikována ve specifikaci OLE DB.
Při spuštění OLE DB Driver for SQL Server vyvolá zpět objekt řádkové sady pro načtení řádků a čtení sloupcových dat.
Viz také
Table-Valued Parametry (OLE DB)
Použijte Table-Valued parametry (OLE DB)