SQL Server dizinleri oluşturma

SQL ServerYerel istemci ole db sağlayıcısı sunar IIndexDefinition::CreateIndex fonksiyonu, tüketiciler üzerinde yeni dizinleri tanımlamak için izin SQL Servertabloları.

SQL ServerYerel istemci ole db sağlayıcısı oluşturur tablo dizinleri dizinler veya kısıtlamaları olarak. SQL Serverkısıtlama oluşturma ayrıcalığı tablo sahibi, veritabanı sahibi ve belirli yönetici rolleri üyeleri verir. Varsayılan olarak, yalnızca tablo sahibi bir tablo üzerinde bir dizin oluşturabilirsiniz. Bu nedenle, başarı ya da başarısızlık CreateIndex sadece uygulama kullanıcının erişim haklarını aynı zamanda oluşturulan dizin türünü bağlıdır.

Tüketiciler, bir Unicode karakter dizesi olarak tablo adını belirtmek pwszName üyesi uName Birliği içinde PTableID parametresi. EKind üyesi PTableID DBKIND_NAME olmalıdır.

OpenRowsetpIndexID parametresi için null olabilir ve eğer, SQL Serveryerel istemci ole db sağlayıcısı, dizin için benzersiz bir ad oluşturur. Tüketici bir DBID geçerli işaretçi belirterek dizinin adını yakalayabilirsiniz ppIndexID parametresi.

Tüketici olarak Unicode karakter dizesi içinde dizin adını belirtebilirsiniz pwszName üyesi uName Birliği OpenRowsetpIndexID parametresi. EKind üyesi OpenRowsetpIndexID DBKIND_NAME olmalıdır.

Tüketici, dizinde adıyla katılan sütun veya belirtir. Kullanılan her DBINDEXCOLUMNDESC yapısı CreateIndex, eKind üyesi pColumnID DBKIND_NAME olmalıdır. Unicode karakter dizesi içinde belirtilen sütun adı pwszName üyesi uName Birliği içinde pColumnID.

SQL ServerYerel istemci ole db sağlayıcısı ve SQL Serverdizin değerleri artan desteği. SQL ServerYerel istemci ole db sağlayıcısı döndürür E_INVALIDARG tüketici DBINDEX_COL_ORDER_DESC herhangi bir DBINDEXCOLUMNDESC yapısında belirtir,.

CreateIndex dizin özelliklerini aşağıdaki gibi yorumlar.

Özellik kimliği

Açıklama

DBPROP_INDEX_AUTOUPDATE

R/w: okuma/yazma

Varsayılan: hiçbiri

Açıklama: SQL Serveryerel istemci ole db sağlayıcısı bu özelliği desteklemiyor. Özelliği ayarlamak çalışır CreateIndex db_s_errorsoccurred dönüş değeri neden. DwStatus üye özelliği yapısını gösterir dbpropstatus_badvalue.

DBPROP_INDEX_CLUSTERED

R/w: okuma/yazma

Varsayılan: VARIANT_FALSE

Açıklama: denetimleri dizini kümeleme.

VARIANT_TRUE: SQL Serveryerel istemci ole db sağlayıcısı çalışır kümelenmiş bir dizin oluşturmak SQL Servertablosu. SQL Serveren çok bir Kümelenmiş dizin üzerinde herhangi bir tabloda destekler.

VARIANT_FALSE: SQL Serveryerel istemci ole db sağlayıcısı çalışır kümelendirilmemiş dizin oluşturmak SQL Servertablosu.

DBPROP_INDEX_FILLFACTOR

R/w: okuma/yazma

Varsayılan: 0

Açıklama: depolama için kullanılan dizin sayfası yüzdesini belirtir. Daha fazla bilgi için bkz: create INDEX.

Değişken vt_ı4 türüdür. Değer sıfırdan büyük veya 1'e eşit olmalıdır ve 100 eşit veya daha az.

DBPROP_INDEX_INITIALIZE

R/w: okuma/yazma

Varsayılan: hiçbiri

Açıklama: SQL Serveryerel istemci ole db sağlayıcısı bu özelliği desteklemiyor. Özelliği ayarlamak çalışır CreateIndex db_s_errorsoccurred dönüş değeri neden. DwStatus üye özelliği yapısını gösterir dbpropstatus_badvalue.

DBPROP_INDEX_NULLCOLLATION

R/w: okuma/yazma

Varsayılan: hiçbiri

Açıklama: SQL Serveryerel istemci ole db sağlayıcısı bu özelliği desteklemiyor. Özelliği ayarlamak çalışır CreateIndex db_s_errorsoccurred dönüş değeri neden. DwStatus üye özelliği yapısını gösterir dbpropstatus_badvalue.

DBPROP_INDEX_NULLS

R/w: okuma/yazma

Varsayılan: hiçbiri

Açıklama: SQL Serveryerel istemci ole db sağlayıcısı bu özelliği desteklemiyor. Özelliği ayarlamak çalışır CreateIndex db_s_errorsoccurred dönüş değeri neden. DwStatus üye özelliği yapısını gösterir dbpropstatus_badvalue.

DBPROP_INDEX_PRIMARYKEY

R/w: okuma/yazma

Varsayılan: VARIANT_FALSE Açıklama: bir tutarlılığı, PRIMARY key kısıtlaması dizin oluşturur.

VARIANT_TRUE: Dizin, tablonun birincil anahtar kısıtlaması desteklemek için oluşturulur. Sütunları nonnullable olmalıdır.

VARIANT_FALSE: Dizin PRIMARY key kısıtlaması tabloda satır değerleri için kullanılmaz.

DBPROP_INDEX_SORTBOOKMARKS

R/w: okuma/yazma

Varsayılan: hiçbiri

Açıklama: SQL Serveryerel istemci ole db sağlayıcısı bu özelliği desteklemiyor. Özelliği ayarlamak çalışır CreateIndex db_s_errorsoccurred dönüş değeri neden. DwStatus üye özelliği yapısını gösterir dbpropstatus_badvalue.

DBPROP_INDEX_TEMPINDEX

R/w: okuma/yazma

Varsayılan: hiçbiri

Açıklama: SQL Serveryerel istemci ole db sağlayıcısı bu özelliği desteklemiyor. Özelliği ayarlamak çalışır CreateIndex db_s_errorsoccurred dönüş değeri neden. DwStatus üye özelliği yapısını gösterir dbpropstatus_badvalue.

DBPROP_INDEX_TYPE

R/w: okuma/yazma

Varsayılan: hiçbiri

Açıklama: SQL Serveryerel istemci ole db sağlayıcısı bu özelliği desteklemiyor. Özelliği ayarlamak çalışır CreateIndex db_s_errorsoccurred dönüş değeri neden. DwStatus üye özelliği yapısını gösterir dbpropstatus_badvalue.

DBPROP_INDEX_UNIQUE

R/w: okuma/yazma

Varsayılan: VARIANT_FALSE

Açıklama: dizin UNIQUE sınırlamasıyla katılımcı sütun veya sütunları oluşturur.

VARIANT_TRUE: Dizin benzersiz tablodaki satır değerleri sınırlamak için kullanılır.

VARIANT_FALSE: Dizin benzersiz satır değerleri kısıtlamak değil.

Sağlayıcıya özgü özellik ayarlamak DBPROPSET_SQLSERVERINDEX, SQL Serveryerel istemci ole db sağlayıcısı aşağıdaki veri kaynağı bilgisi özelliği tanımlar.

Özellik kimliği

Açıklama

SSPROP_INDEX_XML

Türü: vt_bool (r/w)

Varsayılan: VARIANT_FALSE

Açıklama: Bu özelliği varıant_true ile IIndexDefinition::CreateIndex değeri belirtildiğinde, bu sonuçlar endekslenmiyor sütununa karşılık gelen oluşturulan bir birincil xml dizin. Bu özelliği varıant_true ise cIndexColumnDescs 1 olmalıdır, aksi halde bir hata.

Bu örnek, birincil anahtar dizini oluşturur:

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

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

Ayrıca bkz.

Kavramlar

Tablolar ve dizinler