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 ITableDefinition::CreateTable , permitindo aos consumidores criar tabelas SQL Server. Os consumidores utilizam o CreateTable para criar tabelas permanentes nomeadas pelo consumidor, e tabelas permanentes ou temporárias com nomes únicos gerados pelo Driver OLE DB para SQL Server.
Quando o consumidor chama ITableDefinition::CreateTable, se o valor da propriedade DBPROP_TBL_TEMPTABLE for VARIANT_TRUE, o Driver OLE DB para SQL Server gera um nome temporário de tabela para o consumidor. O consumidor define o parâmetro pTableID do método CreateTable para NULL. As tabelas temporárias com nomes gerados pelo Driver OLE DB para SQL Server não aparecem no conjunto de linhas TABLES , mas são acessíveis através da interface IOpenRowset .
Quando os consumidores especificam o nome da tabela no membro pwszName da união uName no parâmetro pTableID , o Driver OLE DB para SQL Server cria uma tabela SQL Server com esse nome. Aplicam-se restrições de nomenclatura de tabelas do SQL Server, e o nome da tabela pode indicar uma tabela permanente, ou uma tabela temporária local ou global. Para obter mais informações, consulte CREATE TABLE. O parâmetro ppTableID pode ser NULL.
O Driver OLE DB para SQL Server pode gerar os nomes de tabelas permanentes ou temporárias. Quando o consumidor define o parâmetro pTableID como NULL e define ppTableID para apontar para um DBID* válido, o Driver OLE DB para SQL Server devolve o nome gerado da tabela no membro pwszName da união uName do DBID, apontado pelo valor ppTableID. Para criar um controlador temporário OLE DB para uma tabela nomeada SQL Server, o consumidor inclui a propriedade da tabela OLE DB DBPROP_TBL_TEMPTABLE num conjunto de propriedades de tabela referenciado no parâmetro rgPropertySets . O Driver OLE DB para tabelas temporárias nomeadas por SQL Server são locais.
O CreateTable devolve DB_E_BADTABLEID se o membro eKind do parâmetro pTableID não indicar DBKIND_NAME.
DBCOLUMNDESC Utilização
O consumidor pode indicar um tipo de dado de coluna usando o membro pwszTypeName ou o membro wType . Se o consumidor especificar o tipo de dado em pwszTypeName, o Driver OLE DB para SQL Server ignora o valor de wType.
Se usar o membro pwszTypeName , o consumidor especifica o tipo de dado usando nomes de tipos de dados SQL Server. Os nomes válidos dos tipos de dados são aqueles devolvidos na coluna TYPE_NAME do conjunto de linhas do esquema PROVIDER_TYPES.
O Driver OLE DB para SQL Server reconhece um subconjunto de valores DBTYPE enumerados pelo OLE DB no membro wType . Para mais informações, consulte Mapeamento de Tipos de Dados em ITableDefinition.
Observação
O CreateTable devolve DB_E_BADTYPE se o consumidor definir o membro pTypeInfo ou pclsid para especificar o tipo de dado da coluna.
O consumidor especifica o nome da coluna no membro pwszName da união uName do membro DBCOLUMNDESC dbcid . O nome da coluna é especificado como uma cadeia de caracteres Unicode. O membro eKind do dbcid deve ser DBKIND_NAME. O CreateTable devolve DB_E_BADCOLUMNID se o eKind for inválido, pwszName for NULL, ou se o valor de pwszName não for um identificador válido do SQL Server.
Todas as propriedades das colunas estão disponíveis em todas as colunas definidas para a tabela. O CreateTable pode devolver DB_S_ERRORSOCCURRED ou DB_E_ERRORSOCCURRED se os valores das propriedades estiverem definidos em conflito. O CreateTable devolve um erro quando definições inválidas de propriedades de coluna causam falhas na criação de tabelas do SQL Server.
As propriedades das colunas num DBCOLUMNDESC são interpretadas da seguinte forma.
| ID da Propriedade | Description |
|---|---|
| DBPROP_COL_AUTOINCREMENT | R/W: Ler/Escrever Padrão: VARIANT_FALSE Descrição: Define a propriedade identidade na coluna criada. Para SQL Server, a propriedade identidade é válida para uma única coluna dentro de uma tabela. Definir a propriedade para VARIANT_TRUE para mais do que uma única coluna gera um erro quando o Driver OLE DB para SQL Server tenta criar a tabela no servidor. A propriedade de identidade do SQL Server só é válida para os tipos inteiro, numérico e decimal quando a escala é 0. Definir a propriedade para VARIANT_TRUE numa coluna de qualquer outro tipo de dado gera um erro quando o Driver OLE DB para SQL Server tenta criar a tabela no servidor. O Driver OLE DB para SQL Server devolve DB_S_ERRORSOCCURRED quando DBPROP_COL_AUTOINCREMENT e DBPROP_COL_NULLABLE estão ambos VARIANT_TRUE e a opção dwOption de DBPROP_COL_NULLABLE não é DBPROPOPTIONS_REQUIRED. DB_E_ERRORSOCCURRED é devolvido quando DBPROP_COL_AUTOINCREMENT e DBPROP_COL_NULLABLE são ambos VARIANT_TRUE e a dwOption de DBPROP_COL_NULLABLE é igual a DBPROPOPTIONS_REQUIRED. A coluna é definida com a propriedade de identidade do SQL Server e o membro DBPROP_COL_NULLABLE dwStatus é definido como DBPROPSTATUS_CONFLICTING. |
| DBPROP_COL_DEFAULT | R/W: Ler/Escrever Padrão: Nenhum Descrição: Cria uma restrição DEFAULT do SQL Server para a coluna. O membro vValue DBPROP pode ser de vários tipos. O membro vValue.vt deve especificar um tipo compatível com o tipo de dados da coluna. Por exemplo, definir BSTR N/A como valor padrão para uma coluna definida como DBTYPE_WSTR é uma correspondência compatível. Definir o mesmo padrão numa coluna definida como DBTYPE_R8 gera um erro quando o Driver OLE DB para SQL Server tenta criar a tabela no servidor. |
| DBPROP_COL_DESCRIPTION | R/W: Ler/Escrever Padrão: Nenhum Descrição: A propriedade da coluna DBPROP_COL_DESCRIPTION não é implementada pelo Driver OLE DB para SQL Server. O membro dwStatus da estrutura DBPROP devolve DBPROPSTATUS_NOTSUPPORTED quando o consumidor tenta escrever o valor da propriedade. Definir a propriedade não constitui um erro fatal para o Driver OLE DB para SQL Server. Se todos os outros valores de parâmetros forem válidos, a tabela SQL Server é criada. |
| DBPROP_COL_FIXEDLENGTH | R/W: Ler/Escrever Padrão: VARIANT_FALSE Descrição: O Driver OLE DB para SQL Server utiliza DBPROP_COL_FIXEDLENGTH para determinar o mapeamento de tipos de dados quando o consumidor define o tipo de dados de uma coluna usando o membro wType do DBCOLUMNDESC. Para mais informações, consulte Mapeamento de Tipos de Dados em ITableDefinition. |
| DBPROP_COL_NULLABLE | R/W: Ler/Escrever Padrão: Nenhum Descrição: Ao criar a tabela, o Driver OLE DB para SQL Server indica se a coluna deve aceitar valores nulos se a propriedade estiver definida. Quando a propriedade não está definida, a capacidade da coluna de aceitar NULL como valor é determinada pelo SQL Server ANSI_NULLS opção padrão de base de dados. O OLE DB Driver para SQL Server é um fornecedor compatível com ISO. As sessões conectadas exibem comportamentos ISO. Se o consumidor não definir DBPROP_COL_NULLABLE, as colunas aceitam valores nulos. |
| DBPROP_COL_PRIMARYKEY | R/W: Ler/Escrever Padrão: VARIANT_FALSE Descrição: Quando VARIANT_TRUE, o Driver OLE DB para SQL Server cria a coluna com uma restrição PRIMARY KEY. Quando definida como uma propriedade de coluna, apenas uma única coluna pode determinar a restrição. Definir a propriedade VARIANT_TRUE para mais do que uma única coluna retorna um erro quando o Driver OLE DB para SQL Server tenta criar a tabela SQL Server. Nota: O consumidor pode usar IIndexDefinition::CreateIndex para criar uma restrição de CHAVE PRIMÁRIA em duas ou mais colunas. O Driver OLE DB para SQL Server devolve DB_S_ERRORSOCCURRED quando DBPROP_COL_PRIMARYKEY e DBPROP_COL_UNIQUE estão ambos VARIANT_TRUE e a opção dwOption de DBPROP_COL_UNIQUE não é DBPROPOPTIONS_REQUIRED. DB_E_ERRORSOCCURRED é devolvida quando DBPROP_COL_PRIMARYKEY e DBPROP_COL_UNIQUE são ambos VARIANT_TRUE e a dwOption de DBPROP_COL_UNIQUE é igual a DBPROPOPTIONS_REQUIRED. A coluna é definida com a propriedade de identidade do SQL Server e o membro DBPROP_COL_PRIMARYKEY dwStatus é definido para DBPROPSTATUS_CONFLICTING. O Driver OLE DB para SQL Server devolve um erro quando DBPROP_COL_PRIMARYKEY e DBPROP_COL_NULLABLE estão ambos VARIANT_TRUE. O Driver OLE DB para SQL Server devolve um erro do SQL Server quando o consumidor tenta criar uma restrição PRIMARY KEY numa coluna de tipo de dado SQL Server inválido. As restrições PRIMARY KEY não podem ser definidas em colunas criadas com os tipos de dados do SQL Server bit, text, ntext e image. |
| DBPROP_COL_UNIQUE | R/W: Ler/Escrever Padrão: VARIANT_FALSE Descrição: Aplica uma restrição ÚNICA do SQL Server à coluna. Quando definida como uma propriedade de coluna, a restrição é aplicada apenas a uma única coluna. O consumidor pode usar IIndexDefinition::CreateIndex para aplicar uma restrição ÚNICA aos valores combinados de duas ou mais colunas. O controlador OLE DB para SQL Server devolve DB_S_ERRORSOCCURRED quando DBPROP_COL_PRIMARYKEY e DBPROP_COL_UNIQUE são ambos VARIANT_TRUE e o dwOption não é DBPROPOPTIONS_REQUIRED. DB_E_ERRORSOCCURRED é devolvida quando DBPROP_COL_PRIMARYKEY e DBPROP_COL_UNIQUE são ambos VARIANT_TRUE e dwOption é igual a DBPROPOPTIONS_REQUIRED. A coluna é definida com a propriedade de identidade do SQL Server e o membro DBPROP_COL_PRIMARYKEY dwStatus é definido para DBPROPSTATUS_CONFLICTING. O controlador OLE DB para SQL Server devolve DB_S_ERRORSOCCURRED quando DBPROP_COL_NULLABLE e DBPROP_COL_UNIQUE estão ambos VARIANT_TRUE e o dwOption não está DBPROPOPTIONS_REQUIRED. DB_E_ERRORSOCCURRED é devolvido quando DBPROP_COL_NULLABLE e DBPROP_COL_UNIQUE são ambos VARIANT_TRUE e dwOption é igual a DBPROPOPTIONS_REQUIRED. A coluna é definida com a propriedade de identidade do SQL Server e o membro DBPROP_COL_NULLABLE dwStatus é definido como DBPROPSTATUS_CONFLICTING. O Driver OLE DB para SQL Server devolve um erro do SQL Server quando o consumidor tenta criar uma restrição ÚNICA numa coluna de tipo de dado inválido do SQL Server. Restrições ÚNICAS não podem ser definidas em colunas criadas com o tipo de dado bit SQL Server. |
Quando o consumidor chama ITableDefinition::CreateTable, o Driver OLE DB para SQL Server interpreta as propriedades da tabela da seguinte forma.
| ID da Propriedade | Description |
|---|---|
| DBPROP_TBL_TEMPTABLE | R/W: Ler/Escrever Padrão: VARIANT_FALSE Descrição: Por defeito, o Driver OLE DB para SQL Server cria tabelas nomeadas pelo consumidor. Quando VARIANT_TRUE, o Driver OLE DB para SQL Server gera um nome temporário de tabela para o consumidor. O consumidor define o parâmetro pTableID do CreateTable como NULL. O parâmetro ppTableID deve conter um ponteiro válido. |
Se o consumidor solicitar que um conjunto de linhas seja aberto numa tabela criada com sucesso, o Driver OLE DB para SQL Server abre um conjunto de linhas suportado por cursor. Quaisquer propriedades de conjunto de linhas podem ser indicadas nos conjuntos de propriedades passados.
Este exemplo cria uma tabela SQL Server.
// This CREATE TABLE statement shows the details of the table 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
// )
//
// The PRIMARY KEY constraint is created in an additional example.
HRESULT CreateTable
(
ITableDefinition* pITableDefinition
)
{
DBID dbidTable;
const ULONG nCols = 5;
ULONG nCol;
ULONG nProp;
DBCOLUMNDESC dbcoldesc[nCols];
HRESULT hr;
// Set up column descriptions. First, set default property values for
// the columns.
for (nCol = 0; nCol < nCols; nCol++)
{
dbcoldesc[nCol].pwszTypeName = NULL;
dbcoldesc[nCol].pTypeInfo = NULL;
dbcoldesc[nCol].rgPropertySets = new DBPROPSET;
dbcoldesc[nCol].pclsid = NULL;
dbcoldesc[nCol].cPropertySets = 1;
dbcoldesc[nCol].ulColumnSize = 0;
dbcoldesc[nCol].dbcid.eKind = DBKIND_NAME;
dbcoldesc[nCol].wType = DBTYPE_I4;
dbcoldesc[nCol].bPrecision = 0;
dbcoldesc[nCol].bScale = 0;
dbcoldesc[nCol].rgPropertySets[0].rgProperties =
new DBPROP[NCOLPROPS_MAX];
dbcoldesc[nCol].rgPropertySets[0].cProperties = NCOLPROPS_MAX;
dbcoldesc[nCol].rgPropertySets[0].guidPropertySet =
DBPROPSET_COLUMN;
for (nProp = 0; nProp < NCOLPROPS_MAX; nProp++)
{
dbcoldesc[nCol].rgPropertySets[0].rgProperties[nProp].
dwOptions = DBPROPOPTIONS_REQUIRED;
dbcoldesc[nCol].rgPropertySets[0].rgProperties[nProp].colid
= DB_NULLID;
VariantInit(
&(dbcoldesc[nCol].rgPropertySets[0].rgProperties[nProp].
vValue));
dbcoldesc[nCol].rgPropertySets[0].rgProperties[nProp].
vValue.vt = VT_BOOL;
}
}
// Set the column-specific information.
dbcoldesc[0].dbcid.uName.pwszName = L"OrderID";
dbcoldesc[0].rgPropertySets[0].rgProperties[0].dwPropertyID =
DBPROP_COL_NULLABLE;
dbcoldesc[0].rgPropertySets[0].rgProperties[0].vValue.boolVal =
VARIANT_FALSE;
dbcoldesc[0].rgPropertySets[0].cProperties = 1;
dbcoldesc[1].dbcid.uName.pwszName = L"ProductID";
dbcoldesc[1].rgPropertySets[0].rgProperties[0].dwPropertyID =
DBPROP_COL_NULLABLE;
dbcoldesc[1].rgPropertySets[0].rgProperties[0].vValue.boolVal =
VARIANT_FALSE;
dbcoldesc[1].rgPropertySets[0].cProperties = 1;
dbcoldesc[2].dbcid.uName.pwszName = L"UnitPrice";
dbcoldesc[2].wType = DBTYPE_CY;
dbcoldesc[2].rgPropertySets[0].rgProperties[0].dwPropertyID =
DBPROP_COL_NULLABLE;
dbcoldesc[2].rgPropertySets[0].rgProperties[0].vValue.boolVal =
VARIANT_FALSE;
dbcoldesc[2].rgPropertySets[0].cProperties = 1;
dbcoldesc[3].dbcid.uName.pwszName = L"Quantity";
dbcoldesc[3].rgPropertySets[0].rgProperties[0].dwPropertyID =
DBPROP_COL_NULLABLE;
dbcoldesc[3].rgPropertySets[0].rgProperties[0].vValue.boolVal =
VARIANT_FALSE;
dbcoldesc[3].rgPropertySets[0].cProperties = 1;
dbcoldesc[4].dbcid.uName.pwszName = L"Discount";
dbcoldesc[4].wType = DBTYPE_NUMERIC;
dbcoldesc[4].bPrecision = 2;
dbcoldesc[4].bScale = 2;
dbcoldesc[4].rgPropertySets[0].rgProperties[0].dwPropertyID =
DBPROP_COL_NULLABLE;
dbcoldesc[4].rgPropertySets[0].rgProperties[0].vValue.boolVal =
VARIANT_FALSE;
dbcoldesc[4].rgPropertySets[0].rgProperties[1].dwPropertyID =
DBPROP_COL_DEFAULT;
dbcoldesc[4].rgPropertySets[0].rgProperties[1].vValue.vt = VT_BSTR;
dbcoldesc[4].rgPropertySets[0].rgProperties[1].vValue.bstrVal =
SysAllocString(L"0");
dbcoldesc[4].rgPropertySets[0].cProperties = 2;
// Set up the dbid for OrderDetails.
dbidTable.eKind = DBKIND_NAME;
dbidTable.uName.pwszName = L"OrderDetails";
if (FAILED(hr = pITableDefinition->CreateTable(NULL, &dbidTable,
nCols, dbcoldesc, NULL, 0, NULL, NULL, NULL)))
{
DumpError(pITableDefinition, IID_ITableDefinition);
goto SAFE_EXIT;
}
SAFE_EXIT:
// Clean up dynamic allocation in the property sets.
for (nCol = 0; nCol < nCols; nCol++)
{
for (nProp = 0; nProp < NCOLPROPS_MAX; nProp++)
{
if (dbcoldesc[nCol].rgPropertySets[0].rgProperties[nProp].
vValue.vt == VT_BSTR)
{
SysFreeString(dbcoldesc[nCol].rgPropertySets[0].
rgProperties[nProp].vValue.bstrVal);
}
}
delete [] dbcoldesc[nCol].rgPropertySets[0].rgProperties;
delete [] dbcoldesc[nCol].rgPropertySets;
}
return (hr);
}