Skapa SQL Server-index

Gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalysplattformssystem (PDW)SQL-databas i Microsoft Fabric

Ladda ned OLE DB-drivrutins

OLE DB-drivrutinen för SQL Server exponerar funktionen IIndexDefinition::CreateIndex , vilket gör det möjligt för konsumenter att definiera nya index på SQL Server-tabeller.

OLE DB-drivrutinen för SQL Server skapar tabellindex som antingen index eller begränsningar. SQL Server ger behörighet att skapa begränsningar till tabellägaren, databasägaren och medlemmar i vissa administrativa roller. Som standard kan endast tabellägaren skapa ett index på en tabell. Därför beror framgång eller misslyckande för CreateIndex inte bara på applikationsanvändarens åtkomsträttigheter utan också på vilken typ av index som skapas.

Konsumenter specificerar tabellnamnet som en Unicode-teckensträng i pwszName-medlemmen i uName-unionen i pTableID-parametern . eKind-medlemmen i pTableID måste vara DBKIND_NAME.

pIndexID-parametern kan vara NULL, och om den är det skapar OLE DB-drivrutinen för SQL Server ett unikt namn för indexet. Konsumenten kan fånga namnet på indexet genom att ange en giltig pekare till ett DBID i ppIndexID-parametern .

Konsumenten kan ange indexnamnet som en Unicode-teckensträng i pwszName-medlemmen i uName-unionen av pIndexID-parametern . eKind-medlemmen i pIndexID måste vara DBKIND_NAME.

Konsumenten anger kolumnen eller kolumnerna som deltar i indexet med namn. För varje DBINDEXCOLUMNDESC-struktur som används i CreateIndex måste eKind-medlemmen i pColumnID vara DBKIND_NAME. Namnet på kolumnen anges som en Unicode-teckensträng i pwszName-medlemmen i uName-unionen i pColumnID.

OLE DB-drivrutinen för SQL Server och SQL Server stödjer stigande ordning på värden i indexet. OLE DB-drivrutinen för SQL Server returnerar E_INVALIDARG om konsumenten specificerar DBINDEX_COL_ORDER_DESC i någon DBINDEXCOLUMNDESC-struktur.

CreateIndex tolkar indexets egenskaper enligt följande.

Egenskaps-ID Description
DBPROP_INDEX_AUTOUPDATE R/W: Läs/skriv

Standard: Ingen

Beskrivning: OLE DB-drivrutinen för SQL Server stöder inte denna egenskap. Försök att sätta egenskapen i CreateIndex ger ett DB_S_ERRORSOCCURRED returnvärde. DwStatus-medlemmen i fastighetsstrukturen indikerar DBPROPSTATUS_BADVALUE.
DBPROP_INDEX_CLUSTERED R/W: Läs/skriv

Standard: VARIANT_FALSE

Beskrivning: Kontrollerar indexklustring.

VARIANT_TRUE: OLE DB-drivrutinen för SQL Server försöker skapa ett klustrat index på SQL Server-tabellen. SQL Server stöder högst ett klustrat index på en tabell.

VARIANT_FALSE: OLE DB-drivrutinen för SQL Server försöker skapa ett icke-klustrat index på SQL Server-tabellen.
DBPROP_INDEX_FILLFACTOR R/W: Läs/skriv

Standard: 0

Beskrivning: Specificerar procentandelen av en indexsida som används för lagring. Mer information finns i SKAPA INDEX.

Variantens typ är VT_I4. Värdet måste vara större än eller lika med 1 och mindre än eller lika med 100.
DBPROP_INDEX_INITIALIZE R/W: Läs/skriv

Standard: Ingen

Beskrivning: OLE DB-drivrutinen för SQL Server stöder inte denna egenskap. Försök att sätta egenskapen i CreateIndex ger ett DB_S_ERRORSOCCURRED returnvärde. DwStatus-medlemmen i fastighetsstrukturen indikerar DBPROPSTATUS_BADVALUE.
DBPROP_INDEX_NULLCOLLATION R/W: Läs/skriv

Standard: Ingen

Beskrivning: OLE DB-drivrutinen för SQL Server stöder inte denna egenskap. Försök att sätta egenskapen i CreateIndex ger ett DB_S_ERRORSOCCURRED returnvärde. DwStatus-medlemmen i fastighetsstrukturen indikerar DBPROPSTATUS_BADVALUE.
DBPROP_INDEX_NULLS R/W: Läs/skriv

Standard: Ingen

Beskrivning: OLE DB-drivrutinen för SQL Server stöder inte denna egenskap. Försök att sätta egenskapen i CreateIndex ger ett DB_S_ERRORSOCCURRED returnvärde. DwStatus-medlemmen i fastighetsstrukturen indikerar DBPROPSTATUS_BADVALUE.
DBPROP_INDEX_PRIMARYKEY R/W: Läs/skriv

Standard: VARIANT_FALSE Beskrivning: Skapar indexet som en referensintegritet, PRIMÄRNYCKEL-begränsning.

VARIANT_TRUE: Indexet skapas för att stödja PRIMARY KEY-begränsningen i tabellen. Kolumnerna måste vara icke-nullbara.

VARIANT_FALSE: Indexet används inte som en PRIMÄRNYCKEL-begränsning för radvärden i tabellen.
DBPROP_INDEX_SORTBOOKMARKS R/W: Läs/skriv

Standard: Ingen

Beskrivning: OLE DB-drivrutinen för SQL Server stöder inte denna egenskap. Försök att sätta egenskapen i CreateIndex ger ett DB_S_ERRORSOCCURRED returnvärde. DwStatus-medlemmen i fastighetsstrukturen indikerar DBPROPSTATUS_BADVALUE.
DBPROP_INDEX_TEMPINDEX R/W: Läs/skriv

Standard: Ingen

Beskrivning: OLE DB-drivrutinen för SQL Server stöder inte denna egenskap. Försök att sätta egenskapen i CreateIndex ger ett DB_S_ERRORSOCCURRED returnvärde. DwStatus-medlemmen i fastighetsstrukturen indikerar DBPROPSTATUS_BADVALUE.
DBPROP_INDEX_TYPE R/W: Läs/skriv

Standard: Ingen

Beskrivning: OLE DB-drivrutinen för SQL Server stöder inte denna egenskap. Försök att sätta egenskapen i CreateIndex ger ett DB_S_ERRORSOCCURRED returnvärde. DwStatus-medlemmen i fastighetsstrukturen indikerar DBPROPSTATUS_BADVALUE.
DBPROP_INDEX_UNIQUE R/W: Läs/skriv

Standard: VARIANT_FALSE

Beskrivning: Skapar indexet som en UNIK begränsning på den deltagande kolumnen eller kolumnerna.

VARIANT_TRUE: Indexet används för att unikt begränsa radvärden i tabellen.

VARIANT_FALSE: Indexet begränsar inte radvärden entydigt på ett sätt.

I den leverantörsspecifika egenskapsuppsättningen DBPROPSET_SQLSERVERINDEX definierar OLE DB-drivrutinen för SQL Server följande egenskap för datakällsinformation.

Egenskaps-ID Description
SSPROP_INDEX_XML Typ: VT_BOOL (R/W)

Standard: VARIANT_FALSE

Beskrivning: När denna egenskap anges med värdet VARIANT_TRUE med IIndexDefinition::CreateIndex, skapas ett primärt xml-index som motsvarar kolumnen som indexeras. Om denna egenskap är VARIANT_TRUE bör cIndexColumnDescs vara 1, annars är det ett fel.

Detta exempel skapar ett primärnyckelindex:

// 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);  
    }  

Se även

Tabeller och index