Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Aplica-se a:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Sistema de Plataforma de Análise (PDW)
Base de dados SQL no Microsoft Fabric
O Driver OLE DB para SQL Server expõe a função IIndexDefinition::CreateIndex , permitindo aos consumidores definir novos índices em tabelas SQL Server.
O Driver OLE DB para SQL Server cria índices de tabela como índices ou restrições. O SQL Server concede privilégio de criação de restrições ao proprietário da tabela, ao dono da base de dados e a membros de determinadas funções administrativas. Por defeito, só o proprietário da tabela pode criar um índice numa tabela. Portanto, o sucesso ou fracasso do CreateIndex depende não só dos direitos de acesso do utilizador da aplicação, mas também do tipo de índice criado.
Os consumidores especificam o nome da tabela como uma cadeia de caracteres Unicode no membro pwszName da união uName no parâmetro pTableID . O membro eKind do pTableID deve ser DBKIND_NAME.
O parâmetro pIndexID pode ser NULL e, se for, o Driver OLE DB para SQL Server cria um nome único para o índice. O consumidor pode capturar o nome do índice especificando um ponteiro válido para um DBID no parâmetro ppIndexID .
O consumidor pode especificar o nome do índice como uma cadeia de caracteres Unicode no membro pwszName da união uName do parâmetro pIndexID . O membro eKind do pIndexID deve ser DBKIND_NAME.
O consumidor especifica a coluna ou colunas participantes no índice pelo nome. Para cada estrutura DBINDEXCOLUMNDESC usada no CreateIndex, o membro eKind do pColumnID deve ser DBKIND_NAME. O nome da coluna é especificado como uma cadeia de caracteres Unicode no membro pwszName da união uName no pColumnID.
O Driver OLE DB para SQL Server e SQL Server suporta ordem crescente nos valores no índice. O Driver OLE DB para SQL Server devolve E_INVALIDARG se o consumidor especificar DBINDEX_COL_ORDER_DESC em qualquer estrutura DBINDEXCOLUMNDESC.
O CreateIndex interpreta as propriedades do índice da seguinte forma.
| ID da Propriedade | Description |
|---|---|
| DBPROP_INDEX_AUTOUPDATE | R/W: Ler/Escrever Padrão: Nenhum Descrição: O Driver OLE DB para SQL Server não suporta esta propriedade. Tentativas de definir a propriedade no CreateIndex causam um valor de retorno DB_S_ERRORSOCCURRED. O membro dwStatus da estrutura da propriedade indica DBPROPSTATUS_BADVALUE. |
| DBPROP_INDEX_CLUSTERED | R/W: Ler/Escrever Padrão: VARIANT_FALSE Descrição: Controla o agrupamento de índices. VARIANT_TRUE: O Driver OLE DB para SQL Server tenta criar um índice clusterizado na tabela SQL Server. O SQL Server suporta, no máximo, um índice clusterizado em qualquer tabela. VARIANT_FALSE: O Driver OLE DB para SQL Server tenta criar um índice não agrupado na tabela SQL Server. |
| DBPROP_INDEX_FILLFACTOR | R/W: Ler/Escrever Padrão: 0 Descrição: Especifica a percentagem de uma página de índice usada para armazenamento. Para obter mais informações, consulte CREATE INDEX. O tipo da variante é VT_I4. O valor deve ser maior ou igual a 1 e menor ou igual a 100. |
| DBPROP_INDEX_INITIALIZE | R/W: Ler/Escrever Padrão: Nenhum Descrição: O Driver OLE DB para SQL Server não suporta esta propriedade. Tentativas de definir a propriedade no CreateIndex causam um valor de retorno DB_S_ERRORSOCCURRED. O membro dwStatus da estrutura da propriedade indica DBPROPSTATUS_BADVALUE. |
| DBPROP_INDEX_NULLCOLLATION | R/W: Ler/Escrever Padrão: Nenhum Descrição: O Driver OLE DB para SQL Server não suporta esta propriedade. Tentativas de definir a propriedade no CreateIndex causam um valor de retorno DB_S_ERRORSOCCURRED. O membro dwStatus da estrutura da propriedade indica DBPROPSTATUS_BADVALUE. |
| DBPROP_INDEX_NULLS | R/W: Ler/Escrever Padrão: Nenhum Descrição: O Driver OLE DB para SQL Server não suporta esta propriedade. Tentativas de definir a propriedade no CreateIndex causam um valor de retorno DB_S_ERRORSOCCURRED. O membro dwStatus da estrutura da propriedade indica DBPROPSTATUS_BADVALUE. |
| DBPROP_INDEX_PRIMARYKEY | R/W: Ler/Escrever Padrão: VARIANT_FALSE Descrição: Cria o índice como uma restrição de integridade referencial, CHAVE PRIMÁRIA. VARIANT_TRUE: O índice é criado para suportar a restrição PRIMARY KEY da tabela. As colunas devem ser não anuláveis. VARIANT_FALSE: O índice não é usado como restrição de CHAVE PRIMÁRIA para valores de linha na tabela. |
| DBPROP_INDEX_SORTBOOKMARKS | R/W: Ler/Escrever Padrão: Nenhum Descrição: O Driver OLE DB para SQL Server não suporta esta propriedade. Tentativas de definir a propriedade no CreateIndex causam um valor de retorno DB_S_ERRORSOCCURRED. O membro dwStatus da estrutura da propriedade indica DBPROPSTATUS_BADVALUE. |
| DBPROP_INDEX_TEMPINDEX | R/W: Ler/Escrever Padrão: Nenhum Descrição: O Driver OLE DB para SQL Server não suporta esta propriedade. Tentativas de definir a propriedade no CreateIndex causam um valor de retorno DB_S_ERRORSOCCURRED. O membro dwStatus da estrutura da propriedade indica DBPROPSTATUS_BADVALUE. |
| DBPROP_INDEX_TYPE | R/W: Ler/Escrever Padrão: Nenhum Descrição: O Driver OLE DB para SQL Server não suporta esta propriedade. Tentativas de definir a propriedade no CreateIndex causam um valor de retorno DB_S_ERRORSOCCURRED. O membro dwStatus da estrutura da propriedade indica DBPROPSTATUS_BADVALUE. |
| DBPROP_INDEX_UNIQUE | R/W: Ler/Escrever Padrão: VARIANT_FALSE Descrição: Cria o índice como uma restrição ÚNICA na coluna ou colunas participantes. VARIANT_TRUE: O índice é usado para restringir de forma única os valores das linhas na tabela. VARIANT_FALSE: O índice não restringe de forma única os valores das linhas. |
No conjunto de propriedades específico do fornecedor DBPROPSET_SQLSERVERINDEX, o Driver OLE DB para SQL Server define a seguinte propriedade de informação da fonte de dados.
| ID da Propriedade | Description |
|---|---|
| SSPROP_INDEX_XML | Tipo: VT_BOOL (R/W) Padrão: VARIANT_FALSE Descrição: Quando esta propriedade é especificada com um valor de VARIANT_TRUE com IIndexDefinition::CreateIndex, resulta na criação de um índice xml primário correspondente à coluna indexada. Se esta propriedade for VARIANT_TRUE, cIndexColumnDescs deve ser 1, caso contrário é um erro. |
Este exemplo cria um índice de chave primária:
// 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);
}