Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform Systeem (PDW)
SQL-database in Microsoft Fabric
OLE DB-stuurprogramma downloaden
De OLE DB-driver voor SQL Server maakt de IIndexDefinition::CreateIndex-functie beschikbaar, waardoor consumenten nieuwe indexen op SQL Server-tabellen kunnen definiëren.
De OLE DB-driver voor SQL Server maakt tabelindexen aan als indexen of beperkingen. SQL Server geeft het recht om beperkingen te creëren aan de tabeleigenaar, database-eigenaar en leden van bepaalde administratieve rollen. Standaard kan alleen de tabeleigenaar een index op een tabel aanmaken. Daarom hangt het succes of falen van CreateIndex niet alleen af van de toegangsrechten van de applicatiegebruiker, maar ook van het type aangemaakte index.
Consumenten specificeren de tabelnaam als een Unicode-tekenstring in het pwszName-lid van de uName-unie in de pTableID-parameter . Het eKind-lid van pTableID moet DBKIND_NAME zijn.
De pIndexID-parameter kan NULL zijn, en als dat zo is, maakt de OLE DB Driver voor SQL Server een unieke naam aan voor de index. De consument kan de naam van de index vastleggen door een geldige pointer naar een DBID te specificeren in de ppIndexID-parameter .
De consument kan de indexnaam specificeren als een Unicode-tekenstring in het pwszName-lid van de uName-unie van de pIndexID-parameter . Het eKind-lid van pIndexID moet DBKIND_NAME zijn.
De consument specificeert de kolom of kolommen die aan de index deelnemen bij naam. Voor elke DBINDEXCOLUMNDESC-structuur die in CreateIndex wordt gebruikt, moet het eKind-lid van de pColumnID DBKIND_NAME zijn. De naam van de kolom wordt gespecificeerd als een Unicode-tekenreeks in het pwszName-lid van de uName-unie in de pColumnID.
De OLE DB-driver voor SQL Server en SQL Server ondersteunt oplopende volgorde van waarden in de index. De OLE DB-driver voor SQL Server geeft E_INVALIDARG terug als de consument DBINDEX_COL_ORDER_DESC specificeert in een DBINDEXCOLUMNDESC-structuur.
CreateIndex interpreteert indexeigenschappen als volgt.
| Eigenschaps-id | Description |
|---|---|
| DBPROP_INDEX_AUTOUPDATE | R/W: Lezen/schrijven Standaard: Geen Beschrijving: De OLE DB-driver voor SQL Server ondersteunt deze eigenschap niet. Pogingen om de eigenschap in CreateIndex in te stellen veroorzaken een DB_S_ERRORSOCCURRED returnwaarde. Het dwStatus-lid van de eigendomsstructuur geeft DBPROPSTATUS_BADVALUE aan. |
| DBPROP_INDEX_CLUSTERED | R/W: Lezen/schrijven Standaard: VARIANT_FALSE Beschrijving: Beheerst indexclustering. VARIANT_TRUE: De OLE DB-driver voor SQL Server probeert een geclusterde index op de SQL Server-tabel te maken. SQL Server ondersteunt hooguit één geclusterde index op elke tabel. VARIANT_FALSE: De OLE DB Driver voor SQL Server probeert een niet-geclusterde index te creëren op de SQL Server-tabel. |
| DBPROP_INDEX_FILLFACTOR | R/W: Lezen/schrijven Standaardwaarde: 0 Beschrijving: Specificeert het percentage van een indexpagina dat voor opslag wordt gebruikt. Zie CREATE INDEX voor meer informatie. Het type variant is VT_I4. De waarde moet groter zijn dan of gelijk aan 1 en kleiner dan of gelijk aan 100. |
| DBPROP_INDEX_INITIALIZE | R/W: Lezen/schrijven Standaard: Geen Beschrijving: De OLE DB-driver voor SQL Server ondersteunt deze eigenschap niet. Pogingen om de eigenschap in CreateIndex in te stellen veroorzaken een DB_S_ERRORSOCCURRED returnwaarde. Het dwStatus-lid van de eigendomsstructuur geeft DBPROPSTATUS_BADVALUE aan. |
| DBPROP_INDEX_NULLCOLLATION | R/W: Lezen/schrijven Standaard: Geen Beschrijving: De OLE DB-driver voor SQL Server ondersteunt deze eigenschap niet. Pogingen om de eigenschap in CreateIndex in te stellen veroorzaken een DB_S_ERRORSOCCURRED returnwaarde. Het dwStatus-lid van de eigendomsstructuur geeft DBPROPSTATUS_BADVALUE aan. |
| DBPROP_INDEX_NULLS | R/W: Lezen/schrijven Standaard: Geen Beschrijving: De OLE DB-driver voor SQL Server ondersteunt deze eigenschap niet. Pogingen om de eigenschap in CreateIndex in te stellen veroorzaken een DB_S_ERRORSOCCURRED returnwaarde. Het dwStatus-lid van de eigendomsstructuur geeft DBPROPSTATUS_BADVALUE aan. |
| DBPROP_INDEX_PRIMARYKEY | R/W: Lezen/schrijven Standaard: VARIANT_FALSE Beschrijving: Maakt de index aan als een referentieintegriteitsbeperking, PRIMARY KEY. VARIANT_TRUE: De index is gemaakt om de PRIMARY KEY-beperking van de tabel te ondersteunen. De kolommen moeten niet-nulleerbaar zijn. VARIANT_FALSE: De index wordt niet gebruikt als een PRIMAIRE KEY-beperking voor rijwaarden in de tabel. |
| DBPROP_INDEX_SORTBOOKMARKS | R/W: Lezen/schrijven Standaard: Geen Beschrijving: De OLE DB-driver voor SQL Server ondersteunt deze eigenschap niet. Pogingen om de eigenschap in CreateIndex in te stellen veroorzaken een DB_S_ERRORSOCCURRED returnwaarde. Het dwStatus-lid van de eigendomsstructuur geeft DBPROPSTATUS_BADVALUE aan. |
| DBPROP_INDEX_TEMPINDEX | R/W: Lezen/schrijven Standaard: Geen Beschrijving: De OLE DB-driver voor SQL Server ondersteunt deze eigenschap niet. Pogingen om de eigenschap in CreateIndex in te stellen veroorzaken een DB_S_ERRORSOCCURRED returnwaarde. Het dwStatus-lid van de eigendomsstructuur geeft DBPROPSTATUS_BADVALUE aan. |
| DBPROP_INDEX_TYPE | R/W: Lezen/schrijven Standaard: Geen Beschrijving: De OLE DB-driver voor SQL Server ondersteunt deze eigenschap niet. Pogingen om de eigenschap in CreateIndex in te stellen veroorzaken een DB_S_ERRORSOCCURRED returnwaarde. Het dwStatus-lid van de eigendomsstructuur geeft DBPROPSTATUS_BADVALUE aan. |
| DBPROP_INDEX_UNIQUE | R/W: Lezen/schrijven Standaard: VARIANT_FALSE Beschrijving: Maakt de index aan als een UNIEKE beperking op de deelnemende kolom of kolommen. VARIANT_TRUE: De index wordt gebruikt om rijwaarden in de tabel uniek te beperken. VARIANT_FALSE: De index beperkt rijwaarden niet eenduidig. |
In de provider-specifieke eigenschapsset DBPROPSET_SQLSERVERINDEX definieert de OLE DB Driver voor SQL Server de volgende eigenschap van gegevensbroninformatie.
| Eigenschaps-id | Description |
|---|---|
| SSPROP_INDEX_XML | Type: VT_BOOL (R/W) Standaard: VARIANT_FALSE Beschrijving: Wanneer deze eigenschap wordt gespecificeerd met een waarde van VARIANT_TRUE met IIndexDefinition::CreateIndex, wordt er een primaire xml-index aangemaakt die overeenkomt met de kolom die geïndexeerd wordt. Als deze eigenschap VARIANT_TRUE is, moet cIndexColumnDescs 1 zijn, anders is het een fout. |
Dit voorbeeld creëert een primaire sleutelindex:
// 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);
}