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
Ovladač OLE DB pro SQL Server zpřístupňuje funkci IIndexDefinition::CreateIndex , která umožňuje uživatelům definovat nové indexy v tabulkách SQL Serveru.
Ovladač OLE DB pro SQL Server vytváří indexy tabulek jako indexy nebo omezení. SQL Server uděluje oprávnění vytváření omezení vlastníkovi tabulky, vlastníkovi databáze a členům určitých administrativních rolí. Ve výchozím nastavení může pouze vlastník tabulky vytvořit index na tabulce. Úspěch nebo neúspěch CreateIndex tedy závisí nejen na přístupových právech uživatele aplikace, ale také na typu vytvořeného indexu.
Spotřebitelé určují název tabulky jako znak Unicode v členu pwszName sjednocení uName v parametru pTableID . Člen eKind v pTableID musí být DBKIND_NAME.
Parametr pIndexID může být NULL, a pokud ano, OLE DB Driver pro SQL Server vytvoří unikátní název pro tento index. Spotřebitel může zachytit název indexu zadáním platného ukazatele na DBID v parametru ppIndexID .
Spotřebitel může zadat název indexu jako znak Unicode v členu pwszName v rámci uName sjednocení parametru pIndexID . Člen eKind v pIndexID musí být DBKIND_NAME.
Spotřebitel specifikuje sloupec nebo sloupce, které se v indexu podílejí, podle jména. Pro každou strukturu DBINDEXCOLUMNDESC používanou v CreateIndex musí být člen eKind v pColumnID DBKIND_NAME. Název sloupce je zadán jako Unicode znakový řetězec v členu pwszNameuName sjednocení v pColumnID.
Ovladač OLE DB pro SQL Server a SQL Server podporuje vzestupné pořadí podle hodnot v indexu. Ovladač OLE DB pro SQL Server vrací E_INVALIDARG, pokud uživatel specifikuje DBINDEX_COL_ORDER_DESC v jakékoli struktuře DBINDEXCOLUMNDESC.
CreateIndex interpretuje vlastnosti indexu následovně.
| ID vlastnosti | Description |
|---|---|
| DBPROP_INDEX_AUTOUPDATE | R/W: Čtení/zápis Žádné výchozí nastavení Popis: Ovladač OLE DB pro SQL Server tuto vlastnost nepodporuje. Pokusy nastavit vlastnost v CreateIndex způsobí DB_S_ERRORSOCCURRED vrácenou hodnotu. Člen dwStatus ve struktuře vlastnosti označuje DBPROPSTATUS_BADVALUE. |
| DBPROP_INDEX_CLUSTERED | R/W: Čtení/zápis Výchozí: VARIANT_FALSE Popis: Řídí shlukování indexů. VARIANT_TRUE: Ovladač OLE DB pro SQL Server se snaží vytvořit shlukovaný index v tabulce SQL Serveru. SQL Server podporuje maximálně jeden clusterovaný index na jakékoli tabulce. VARIANT_FALSE: Ovladač OLE DB pro SQL Server se snaží vytvořit neclusterovaný index v tabulce SQL Server. |
| DBPROP_INDEX_FILLFACTOR | R/W: Čtení/zápis Výchozí hodnota: 0 Popis: Specifikuje procento indexové stránky používané pro úložiště. Další informace naleznete v tématu CREATE INDEX. Typ varianty je VT_I4. Hodnota musí být větší nebo rovna 1 a menší nebo rovna 100. |
| DBPROP_INDEX_INITIALIZE | R/W: Čtení/zápis Žádné výchozí nastavení Popis: Ovladač OLE DB pro SQL Server tuto vlastnost nepodporuje. Pokusy nastavit vlastnost v CreateIndex způsobí DB_S_ERRORSOCCURRED vrácenou hodnotu. Člen dwStatus ve struktuře vlastnosti označuje DBPROPSTATUS_BADVALUE. |
| DBPROP_INDEX_NULLCOLLATION | R/W: Čtení/zápis Žádné výchozí nastavení Popis: Ovladač OLE DB pro SQL Server tuto vlastnost nepodporuje. Pokusy nastavit vlastnost v CreateIndex způsobí DB_S_ERRORSOCCURRED vrácenou hodnotu. Člen dwStatus ve struktuře vlastnosti označuje DBPROPSTATUS_BADVALUE. |
| DBPROP_INDEX_NULLS | R/W: Čtení/zápis Žádné výchozí nastavení Popis: Ovladač OLE DB pro SQL Server tuto vlastnost nepodporuje. Pokusy nastavit vlastnost v CreateIndex způsobí DB_S_ERRORSOCCURRED vrácenou hodnotu. Člen dwStatus ve struktuře vlastnosti označuje DBPROPSTATUS_BADVALUE. |
| DBPROP_INDEX_PRIMARYKEY | R/W: Čtení/zápis Výchozí: VARIANT_FALSE Popis: Vytvoří index jako referenční integritu, omezení PRIMÁRNÍ KLÍČ. VARIANT_TRUE: Index je vytvořen tak, aby podporoval omezení PRIMÁRNÍ KLÍČ tabulky. Sloupce musí být nenulovatelné. VARIANT_FALSE: Index se nepoužívá jako omezení PRIMÁRNÍHO KLÍČE pro hodnoty řádků v tabulce. |
| DBPROP_INDEX_SORTBOOKMARKS | R/W: Čtení/zápis Žádné výchozí nastavení Popis: Ovladač OLE DB pro SQL Server tuto vlastnost nepodporuje. Pokusy nastavit vlastnost v CreateIndex způsobí DB_S_ERRORSOCCURRED vrácenou hodnotu. Člen dwStatus ve struktuře vlastnosti označuje DBPROPSTATUS_BADVALUE. |
| DBPROP_INDEX_TEMPINDEX | R/W: Čtení/zápis Žádné výchozí nastavení Popis: Ovladač OLE DB pro SQL Server tuto vlastnost nepodporuje. Pokusy nastavit vlastnost v CreateIndex způsobí DB_S_ERRORSOCCURRED vrácenou hodnotu. Člen dwStatus ve struktuře vlastnosti označuje DBPROPSTATUS_BADVALUE. |
| DBPROP_INDEX_TYPE | R/W: Čtení/zápis Žádné výchozí nastavení Popis: Ovladač OLE DB pro SQL Server tuto vlastnost nepodporuje. Pokusy nastavit vlastnost v CreateIndex způsobí DB_S_ERRORSOCCURRED vrácenou hodnotu. Člen dwStatus ve struktuře vlastnosti označuje DBPROPSTATUS_BADVALUE. |
| DBPROP_INDEX_UNIQUE | R/W: Čtení/zápis Výchozí: VARIANT_FALSE Popis: Vytvoří index jako JEDINEČNÉ omezení pro zúčastněný sloupec nebo sloupce. VARIANT_TRUE: Index se používá k jednoznačnému omezení hodnot řádků v tabulce. VARIANT_FALSE: Index jednoznačně neomezuje hodnoty řádků. |
V souboru vlastností specifických pro poskytovatele DBPROPSET_SQLSERVERINDEX definuje OLE DB Driver pro SQL Server následující vlastnost informací o zdroji dat.
| ID vlastnosti | Description |
|---|---|
| SSPROP_INDEX_XML | Typ: VT_BOOL (R/W) Výchozí: VARIANT_FALSE Popis: Když je tato vlastnost specifikována hodnotou VARIANT_TRUE pomocí IIndexDefinition::CreateIndex, výsledkem je vytvoření primárního xml indexu odpovídajícího indexovanému sloupci. Pokud je tato vlastnost VARIANT_TRUE, cIndexColumnDescs by měl být 1, jinak je to chyba. |
Tento příklad vytváří index primárního klíče:
// This CREATE TABLE statement shows the referential integrity and
// PRIMARY KEY constraint on the OrderDetails table that will be created
// by the following example code.
//
// CREATE TABLE OrderDetails
// (
// OrderID int NOT NULL
// ProductID int NOT NULL
// CONSTRAINT PK_OrderDetails
// PRIMARY KEY CLUSTERED (OrderID, ProductID),
// UnitPrice money NOT NULL,
// Quantity int NOT NULL,
// Discount decimal(2,2) NOT NULL
// DEFAULT 0
// )
//
HRESULT CreatePrimaryKey
(
IIndexDefinition* pIIndexDefinition
)
{
HRESULT hr = S_OK;
DBID dbidTable;
DBID dbidIndex;
const ULONG nCols = 2;
ULONG nCol;
const ULONG nProps = 2;
ULONG nProp;
DBINDEXCOLUMNDESC dbidxcoldesc[nCols];
DBPROP dbpropIndex[nProps];
DBPROPSET dbpropset;
DBID* pdbidIndexOut = NULL;
// Set up identifiers for the table and index.
dbidTable.eKind = DBKIND_NAME;
dbidTable.uName.pwszName = L"OrderDetails";
dbidIndex.eKind = DBKIND_NAME;
dbidIndex.uName.pwszName = L"PK_OrderDetails";
// Set up column identifiers.
for (nCol = 0; nCol < nCols; nCol++)
{
dbidxcoldesc[nCol].pColumnID = new DBID;
dbidxcoldesc[nCol].pColumnID->eKind = DBKIND_NAME;
dbidxcoldesc[nCol].eIndexColOrder = DBINDEX_COL_ORDER_ASC;
}
dbidxcoldesc[0].pColumnID->uName.pwszName = L"OrderID";
dbidxcoldesc[1].pColumnID->uName.pwszName = L"ProductID";
// Set properties for the index. The index is clustered,
// PRIMARY KEY.
for (nProp = 0; nProp < nProps; nProp++)
{
dbpropIndex[nProp].dwOptions = DBPROPOPTIONS_REQUIRED;
dbpropIndex[nProp].colid = DB_NULLID;
VariantInit(&(dbpropIndex[nProp].vValue));
dbpropIndex[nProp].vValue.vt = VT_BOOL;
}
dbpropIndex[0].dwPropertyID = DBPROP_INDEX_CLUSTERED;
dbpropIndex[0].vValue.boolVal = VARIANT_TRUE;
dbpropIndex[1].dwPropertyID = DBPROP_INDEX_PRIMARYKEY;
dbpropIndex[1].vValue.boolVal = VARIANT_TRUE;
dbpropset.rgProperties = dbpropIndex;
dbpropset.cProperties = nProps;
dbpropset.guidPropertySet = DBPROPSET_INDEX;
hr = pIIndexDefinition->CreateIndex(&dbidTable, &dbidIndex, nCols,
dbidxcoldesc, 1, &dbpropset, &pdbidIndexOut);
// Clean up dynamically allocated DBIDs.
for (nCol = 0; nCol < nCols; nCol++)
{
delete dbidxcoldesc[nCol].pColumnID;
}
return (hr);
}