Membuat Indeks Klien Asli SQL Server

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System (PDW)

Penyedia SQL Server Native Client OLE DB mengekspos fungsi IIndexDefinition::CreateIndex , memungkinkan konsumen untuk menentukan indeks baru pada tabel SQL Server.

Penyedia SQL Server Native Client OLE DB membuat indeks tabel sebagai indeks atau batasan. SQL Server memberikan hak istimewa pembuatan batasan kepada pemilik tabel, pemilik database, dan anggota peran administratif tertentu. Secara default, hanya pemilik tabel yang dapat membuat indeks pada tabel. Oleh karena itu, keberhasilan atau kegagalan CreateIndex tidak hanya bergantung pada hak akses pengguna aplikasi tetapi juga pada jenis indeks yang dibuat.

Konsumen menentukan nama tabel sebagai string karakter Unicode di anggota pwszName dari union uName dalam parameter pTableID . Anggota eKind dari pTableID harus DBKIND_NAME.

Parameter pIndexID dapat berupa NULL, dan jika ya, penyedia SQL Server Native Client OLE DB membuat nama unik untuk indeks. Konsumen dapat mengambil nama indeks dengan menentukan penunjuk yang valid ke DBID dalam parameter ppIndexID .

Konsumen dapat menentukan nama indeks sebagai string karakter Unicode di anggota pwszName dari union uName parameter pIndexID . Anggota eKind dari pIndexID harus DBKIND_NAME.

Konsumen menentukan kolom atau kolom yang berpartisipasi dalam indeks berdasarkan nama. Untuk setiap struktur DBINDEXCOLUMNDESC yang digunakan dalam CreateIndex, anggota eKind dari pColumnID harus DBKIND_NAME. Nama kolom ditentukan sebagai string karakter Unicode di anggota pwszName dari union uName di pColumnID.

Penyedia SQL Server Native Client OLE DB dan SQL Server mendukung urutan naik pada nilai dalam indeks. Penyedia SQL Server Native Client OLE DB mengembalikan E_INVALIDARG jika konsumen menentukan DBINDEX_COL_ORDER_DESC dalam struktur DBINDEXCOLUMNDESC apa pun.

CreateIndex menginterpretasikan properti indeks sebagai berikut.

ID Properti Deskripsi
DBPROP_INDEX_AUTOUPDATE R/W: Baca/tulis

Default: Tidak Ada

Deskripsi: Penyedia SQL Server Native Client OLE DB tidak mendukung properti ini. Upaya untuk mengatur properti di CreateIndex menyebabkan nilai pengembalian DB_S_ERRORSOCCURRED. Anggota dwStatus dari struktur properti menunjukkan DBPROPSTATUS_BADVALUE.
DBPROP_INDEX_CLUSTERED R/W: Baca/tulis

Default: VARIANT_FALSE

Deskripsi: Mengontrol pengklusteran indeks.

VARIANT_TRUE: Penyedia SQL Server Native Client OLE DB mencoba membuat indeks berkluster pada tabel SQL Server. SQL Server mendukung paling banyak satu indeks berkluster pada tabel apa pun.

VARIANT_FALSE: Penyedia SQL Server Native Client OLE DB mencoba membuat indeks nonclustered pada tabel SQL Server.
DBPROP_INDEX_FILLFACTOR R/W: Baca/tulis

Default: 0

Deskripsi: Menentukan persentase halaman indeks yang digunakan untuk penyimpanan. Untuk informasi selengkapnya, lihat MEMBUAT INDEKS.

Jenis variannya adalah VT_I4. Nilai harus lebih besar dari atau sama dengan 1 dan kurang dari atau sama dengan 100.
DBPROP_INDEX_INITIALIZE R/W: Baca/tulis

Default: Tidak Ada

Deskripsi: Penyedia SQL Server Native Client OLE DB tidak mendukung properti ini. Upaya untuk mengatur properti di CreateIndex menyebabkan nilai pengembalian DB_S_ERRORSOCCURRED. Anggota dwStatus dari struktur properti menunjukkan DBPROPSTATUS_BADVALUE.
DBPROP_INDEX_NULLCOLLATION R/W: Baca/tulis

Default: Tidak Ada

Deskripsi: Penyedia SQL Server Native Client OLE DB tidak mendukung properti ini. Upaya untuk mengatur properti di CreateIndex menyebabkan nilai pengembalian DB_S_ERRORSOCCURRED. Anggota dwStatus dari struktur properti menunjukkan DBPROPSTATUS_BADVALUE.
DBPROP_INDEX_NULLS R/W: Baca/tulis

Default: Tidak Ada

Deskripsi: Penyedia SQL Server Native Client OLE DB tidak mendukung properti ini. Upaya untuk mengatur properti di CreateIndex menyebabkan nilai pengembalian DB_S_ERRORSOCCURRED. Anggota dwStatus dari struktur properti menunjukkan DBPROPSTATUS_BADVALUE.
DBPROP_INDEX_PRIMARYKEY R/W: Baca/tulis

Default: deskripsi VARIANT_FALSE: Membuat indeks sebagai integritas referensial, batasan KUNCI PRIMER.

VARIANT_TRUE: Indeks dibuat untuk mendukung batasan KUNCI PRIMER tabel. Kolom harus tidak dapat diulang.

VARIANT_FALSE: Indeks tidak digunakan sebagai batasan KUNCI PRIMER untuk nilai baris dalam tabel.
DBPROP_INDEX_SORTBOOKMARKS R/W: Baca/tulis

Default: Tidak Ada

Deskripsi: Penyedia SQL Server Native Client OLE DB tidak mendukung properti ini. Upaya untuk mengatur properti di CreateIndex menyebabkan nilai pengembalian DB_S_ERRORSOCCURRED. Anggota dwStatus dari struktur properti menunjukkan DBPROPSTATUS_BADVALUE.
DBPROP_INDEX_TEMPINDEX R/W: Baca/tulis

Default: Tidak Ada

Deskripsi: Penyedia SQL Server Native Client OLE DB tidak mendukung properti ini. Upaya untuk mengatur properti di CreateIndex menyebabkan nilai pengembalian DB_S_ERRORSOCCURRED. Anggota dwStatus dari struktur properti menunjukkan DBPROPSTATUS_BADVALUE.
DBPROP_INDEX_TYPE R/W: Baca/tulis

Default: Tidak Ada

Deskripsi: Penyedia SQL Server Native Client OLE DB tidak mendukung properti ini. Upaya untuk mengatur properti di CreateIndex menyebabkan nilai pengembalian DB_S_ERRORSOCCURRED. Anggota dwStatus dari struktur properti menunjukkan DBPROPSTATUS_BADVALUE.
DBPROP_INDEX_UNIQUE R/W: Baca/tulis

Default: VARIANT_FALSE

Deskripsi: Membuat indeks sebagai batasan UNIK pada kolom atau kolom yang berpartisipasi.

VARIANT_TRUE: Indeks digunakan untuk membatasi nilai baris secara unik dalam tabel.

VARIANT_FALSE: Indeks tidak membatasi nilai baris secara unik.

Dalam kumpulan properti khusus penyedia DBPROPSET_SQLSERVERINDEX, penyedia SQL Server Native Client OLE DB menentukan properti informasi sumber data berikut.

ID Properti Deskripsi
SSPROP_INDEX_XML Jenis: VT_BOOL (R/W)

Default: VARIANT_FALSE

Deskripsi: Ketika properti ini ditentukan dengan nilai VARIANT_TRUE dengan IIndexDefinition::CreateIndex, properti ini menghasilkan indeks xml utama yang dibuat sesuai dengan kolom yang sedang diindeks. Jika properti ini VARIANT_TRUE, cIndexColumnDescs harus 1, jika tidak, itu adalah kesalahan.

Contoh ini membuat indeks kunci primer:

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

Lihat Juga

Tabel dan Indeks