Udostępnij za pośrednictwem


Tworzenie indeksów programu SQL Server

SQL Server Udostępnia macierzystym klienta dostawca OLE DB IIndexDefinition::CreateIndex funkcja pozwala zdefiniować nowe indeksy na SQL Server tabele.

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 Powodzenie lub niepowodzenie CreateIndex zależy nie tylko prawa dostępu użytkownika aplikacji, ale także od typu utworzyć indeks.

Konsumentom należy podać nazwę tabela jako ciąg znaków Unicode w pwszName element członkowski uName Unii w pTableID parametru.EKind element członkowski pTableID musi być DBKIND_NAME.

PIndexID parametr może być NULL, i jeżeli jest to SQL Server macierzystego klienta dostawca OLE DB tworzy unikatową nazwę indeksu.Konsument może przechwytywać nazwę indeksu, określając prawidłowego wskaźnika do identyfikatora DBID w ppIndexID parametru.

Konsument można określić nazwę indeksu jako ciąg znaków Unicode w pwszName element członkowski uName Unii z pIndexID parametru.EKind element członkowski pIndexID musi być DBKIND_NAME.

Konsument określa kolumna lub kolumna, uczestniczących w indeksie przez nazwę.Dla każdej struktury DBINDEXCOLUMNDESC w CreateIndex, eKind element członkowski pColumnID musi być DBKIND_NAME.Nazwa kolumna jest określona jako ciąg znaków Unicode w pwszName element członkowski uName Unii w pColumnID.

SQL Server Macierzystego klienta dostawca OLE DB i SQL Server obsługi rosnącej kolejności wartości indeksu. SQL Server Macierzystego klienta dostawca OLE DB zwraca E_INVALIDARG, jeżeli konsument określa DBINDEX_COL_ORDER_DESC w dowolnym struktury DBINDEXCOLUMNDESC.

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

Identyfikator właściwości

Opis

DBPROP_INDEX_AUTOUPDATE

R I W: Odczyt i zapis

Wartość domyślna: Brak

Opis: SQL Server Macierzystego klienta dostawca OLE DB nie obsługuje tej właściwość.Próbuje zestaw właściwości w CreateIndex spowodować DB_S_ERRORSOCCURRED wartości zwracanej.DwStatus element członkowski właściwość struktury wskazuje DBPROPSTATUS_BADVALUE.

DBPROP_INDEX_CLUSTERED

R I W: Odczyt i zapis

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: SQL Server Macierzystego klienta dostawca OLE DB próbuje utworzyć indeks nieklastrowany na SQL Server tabela.

DBPROP_INDEX_FILLFACTOR

R I W: Odczyt i zapis

Wartość domyślna: 0

Opis: Określa procent używane do przechowywania strona indeksu.Aby uzyskać więcej informacji, zobacz CREATE INDEX.

Typ wariantowy jest VT_I4.Wartość musi być większa lub równa 1 i mniejsza lub równa 100.

DBPROP_INDEX_INITIALIZE

R I W: Odczyt i zapis

Wartość domyślna: Brak

Opis: SQL Server Macierzystego klienta dostawca OLE DB nie obsługuje tej właściwość.Próbuje zestaw właściwości w CreateIndex spowodować DB_S_ERRORSOCCURRED wartości zwracanej.DwStatus element członkowski właściwość struktury wskazuje DBPROPSTATUS_BADVALUE.

DBPROP_INDEX_NULLCOLLATION

R I W: Odczyt i zapis

Wartość domyślna: Brak

Opis: SQL Server Macierzystego klienta dostawca OLE DB nie obsługuje tej właściwość.Próbuje zestaw właściwości w CreateIndex spowodować DB_S_ERRORSOCCURRED wartości zwracanej.DwStatus element członkowski właściwość struktury wskazuje DBPROPSTATUS_BADVALUE.

DBPROP_INDEX_NULLS

R I W: Odczyt i zapis

Wartość domyślna: Brak

Opis: SQL Server Macierzystego klienta dostawca OLE DB nie obsługuje tej właściwość.Próbuje zestaw właściwości w CreateIndex spowodować DB_S_ERRORSOCCURRED wartości zwracanej.DwStatus element członkowski właściwość struktury wskazuje DBPROPSTATUS_BADVALUE.

DBPROP_INDEX_PRIMARYKEY

R I W: Odczyt i zapis

Wartość domyślna: VARIANT_FALSE opis: Tworzy indeks, jak więzy integralność ograniczenie klucza podstawowego.

VARIANT_TRUE: Tworzony jest indeks obsługuje ograniczenie klucza podstawowego tabela.Kolumny muszą być nonnullable.

VARIANT_FALSE: Indeks nie jest używany jako ograniczenie klucza podstawowego dla wartości wiersza w tabela.

DBPROP_INDEX_SORTBOOKMARKS

R I W: Odczyt i zapis

Wartość domyślna: Brak

Opis: SQL Server Macierzystego klienta dostawca OLE DB nie obsługuje tej właściwość.Próbuje zestaw właściwości w CreateIndex spowodować DB_S_ERRORSOCCURRED wartości zwracanej.DwStatus element członkowski właściwość struktury wskazuje DBPROPSTATUS_BADVALUE.

DBPROP_INDEX_TEMPINDEX

R I W: Odczyt i zapis

Wartość domyślna: Brak

Opis: SQL Server Macierzystego klienta dostawca OLE DB nie obsługuje tej właściwość.Próbuje zestaw właściwości w CreateIndex spowodować DB_S_ERRORSOCCURRED wartości zwracanej.DwStatus element członkowski właściwość struktury wskazuje DBPROPSTATUS_BADVALUE.

DBPROP_INDEX_TYPE

R I W: Odczyt i zapis

Wartość domyślna: Brak

Opis: SQL Server Macierzystego klienta dostawca OLE DB nie obsługuje tej właściwość.Próbuje zestaw właściwości w CreateIndex spowodować DB_S_ERRORSOCCURRED wartości zwracanej.DwStatus element członkowski właściwość struktury wskazuje DBPROPSTATUS_BADVALUE.

DBPROP_INDEX_UNIQUE

R I W: Odczyt i zapis

Wartość domyślna: VARIANT_FALSE

Opis: Tworzy indeks jako ograniczenie UNIKATOWOŚCI uczestniczących kolumna lub kolumn.

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

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

właściwość specyficzne dla dostawca zestaw DBPROPzestaw_SQLSERVERINDEX, SQL Server macierzystego klienta dostawca OLE DB definiuje następujące dane źródło informacji właściwość.

Identyfikator właściwości

Opis

SSPROP_INDEX_XML

Typ: (ODCZYT/ZAPIS) VT_BOOL.

Wartość domyślna: VARIANT_FALSE

Opis: Gdy ta właściwość jest określona wartość VARIANT_TRUE z IIndexDefinition::CreateIndex, on wyniki w indeksie podstawowego xml tworzonego odpowiadającej kolumny indeksowane.Jeśli ta właściwość jest VARIANT_TRUE, cIndexColumnDescs powinny być 1, w przeciwnym razie jest błąd.

To przykładowe polecenie tworzy klucz podstawowy indeksu:

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

Zobacz także

Koncepcje