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