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
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk