Udostępnij za pośrednictwem


Tworzenie indeksów programu SQL Server

The SQL Server Native klient OLE DB dostawca exposes the IIndexDefinition::CreateIndex funkcja, allowing consumers to define new indexes on SQL Server tables.

The SQL Server Native Client OLE DB provider creates table indexes as either indexes or constraints.SQL Server gives constraint-creation privilege to the table owner, database owner, and members of certain administrative roles.Domyślnie tylko właściciel tabela można utworzyć indeks dla tabela.Dlatego też Powodzenie lub Niepowodzenie CreateIndex zależy nie tylko na prawa dostępu użytkowników aplikacji, ale również na typ indeksu utworzone.

Konsumenci należy podać nazwę tabela jako ciąg znaków Unicode w pwszName element członkowski członkowskiuName związek w pTableID parametr.The eKind element członkowski of pTableID must be DBKIND_NAME.

The pIndexID parameter can be NULL, and if it is, the SQL Server Native klient OLE DB dostawca creates a unique name for the index. Konsument może przechwytywać nazwę indeksu, podając prawidłowy wskaźnik do identyfikator DBID w w ppIndexID parametr.

Konsument może określić nazwy indeksu jako ciąg znaków Unicode w pwszName element członkowski członkowskiuName związekpIndexID parametr.The eKind element członkowski of pIndexID must be DBKIND_NAME.

Konsument określa kolumna lub kolumna wchodzące w indeksie przez nazwę.Dla każdej struktury DBINDEXCOLUMNDESC używane w CreateIndex, the eKind element członkowski członkowskipColumnID musi być DBKIND_NAME.Nazwa kolumna jest określony jako ciąg znaków Unicode w pwszName element członkowski członkowskiuName związek w pColumnID.

The SQL Server Native klient OLE DB dostawca and SQL Server support ascending order on values in the index. The SQL Server Native klient OLE DB dostawca returns E_INVALIDARG if the consumer specifies DBINDEX_COL_ORDER_DESC in any DBINDEXCOLUMNDESC structure.

CreateIndex interpretuje właściwości indeksu w następujący sposób.

Identyfikator właściwość

Description

DBPROP_INDEX_AUTOUPDATE

R/W: Właściwość do odczytu i zapisu

Wartość domyślna: Brak

Opis: The SQL Server Macierzysta klient OLE DB dostawca nie obsługuje tej właściwość. Próbuje zestaw właściwość w CreateIndex spowodować DB_S_ERRORSOCCURRED zwracanej wartości.The dwStatus element członkowski of the właściwość structure indicates DBPROPSTATUS_BADVALUE.

DBPROP_INDEX_CLUSTERED

R/W: Właściwość do odczytu i zapisu

Wartość domyślna: VARIANT_FALSE

Opis: Indeks formantów klastrowanie.

VARIANT_TRUE: The SQL Server Native Client OLE DB provider attempts to create a clustered index on the SQL Server table.SQL Server supports at most one clustered index on any table.

VARIANT_FALSE: The SQL Server Próbuje utworzyć indeks nieklastrowany dla macierzystego dostawca klient OLE DB SQL Server Tabela.

DBPROP_INDEX_FILLFACTOR

R/W: Właściwość do odczytu i zapisu

Wartość domyślna: 0

Opis: Określa procent strona indeksu służących do przechowywania danych. Aby uzyskać więcej informacji zobacz TWORZENIE INDEKSU.

Typ wariantu to VT_I4.Wartość musi być większa lub równa 1 i mniejszą niż 100.

DBPROP_INDEX_INITIALIZE

R/W: Właściwość do odczytu i zapisu

Wartość domyślna: Brak

Opis: The SQL Server Macierzysta klient OLE DB dostawca nie obsługuje tej właściwość. Próbuje zestaw właściwość w CreateIndex spowodować DB_S_ERRORSOCCURRED zwracanej wartości.The dwStatus element członkowski of the właściwość structure indicates DBPROPSTATUS_BADVALUE.

DBPROP_INDEX_NULLCOLLATION

R/W: Właściwość do odczytu i zapisu

Wartość domyślna: Brak

Opis: The SQL Server Macierzysta klient OLE DB dostawca nie obsługuje tej właściwość. Próbuje zestaw właściwość w CreateIndex spowodować DB_S_ERRORSOCCURRED zwracanej wartości.The dwStatus element członkowski of the właściwość structure indicates DBPROPSTATUS_BADVALUE.

DBPROP_INDEX_NULLS

R/W: Właściwość do odczytu i zapisu

Wartość domyślna: Brak

Opis: The SQL Server Macierzysta klient OLE DB dostawca nie obsługuje tej właściwość. Próbuje zestaw właściwość w CreateIndex spowodować DB_S_ERRORSOCCURRED zwracanej wartości.The dwStatus element członkowski of the właściwość structure indicates DBPROPSTATUS_BADVALUE.

DBPROP_INDEX_PRIMARYKEY

R/W: Właściwość do odczytu i zapisu

Wartość domyślna: Opis VARIANT_FALSE: Tworzy indeks, jak więzy integralność ograniczenia klucz podstawowy.

VARIANT_TRUE: Indeks jest tworzony do obsługi ograniczenia klucz podstawowy tabela. Kolumny muszą być nonnullable.

VARIANT_FALSE: Indeks nie jest używana jako ograniczenia klucz podstawowy dla wartości wiersza w tabela.

DBPROP_INDEX_SORTBOOKMARKS

R/W: Właściwość do odczytu i zapisu

Wartość domyślna: Brak

Opis: The SQL Server Macierzysta klient OLE DB dostawca nie obsługuje tej właściwość. Próbuje zestaw właściwość w CreateIndex spowodować DB_S_ERRORSOCCURRED zwracanej wartości.The dwStatus element członkowski of the właściwość structure indicates DBPROPSTATUS_BADVALUE.

DBPROP_INDEX_TEMPINDEX

R/W: Właściwość do odczytu i zapisu

Wartość domyślna: Brak

Opis: The SQL Server Macierzysta klient OLE DB dostawca nie obsługuje tej właściwość. Próbuje zestaw właściwość w CreateIndex spowodować DB_S_ERRORSOCCURRED zwracanej wartości.The dwStatus element członkowski of the właściwość structure indicates DBPROPSTATUS_BADVALUE.

DBPROP_INDEX_TYPE

R/W: Właściwość do odczytu i zapisu

Wartość domyślna: Brak

Opis: The SQL Server Macierzysta klient OLE DB dostawca nie obsługuje tej właściwość. Próbuje zestaw właściwość w CreateIndex spowodować DB_S_ERRORSOCCURRED zwracanej wartości.The dwStatus element członkowski of the właściwość structure indicates DBPROPSTATUS_BADVALUE.

DBPROP_INDEX_UNIQUE

R/W: Właściwość do odczytu i zapisu

Wartość domyślna: VARIANT_FALSE

Opis: Tworzy indeks jako ograniczenia typu UNIQUE na uczestniczących kolumna lub kolumna.

VARIANT_TRUE: Indeks jest używany do unikatowego ograniczenia wartości wiersza w tabela.

VARIANT_FALSE: Indeks nie jednoznacznie ograniczyć wartości wiersza.

W polu właściwość specyficzne dla dostawca zestaw DBPROPzestaw_SQLSERVERINDEX, SQL Server Macierzystego dostawca klient OLE DB definiuje następujące właściwość informacje urządzenie źródłowe danych.

Identyfikator właściwość

Description

SSPROP_INDEX_XML

Typ: VT_BOOL (odczyt/zapis)

Wartość domyślna: VARIANT_FALSE

Opis: Jeśli ta właściwość została określona z wartością VARIANT_TRUE z IIndexDefinition::CreateIndex go powoduje indeksu głównego danych xml, tworzony odpowiadającą kolumnie operacji indeksowania. Jeśli ta właściwość jest VARIANT_TRUE, cIndexColumnDescs powinna wynosić 1, w przeciwnym razie, występuje błąd.

W tym przykładzie tworzony jest indeks klucz podstawowy:

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

See Also

Concepts