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