Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform Systeem (PDW)
SQL-database in Microsoft Fabric
OLE DB-stuurprogramma downloaden
De OLE DB-driver voor SQL Server maakt de ITableDefinition::CreateTable-functie beschikbaar, waardoor consumenten SQL Server-tabellen kunnen maken. Consumenten gebruiken CreateTable om permanente tabellen met consumentennaam te maken, en permanente of tijdelijke tabellen met unieke namen die worden gegenereerd door de OLE DB-driver voor SQL Server.
Wanneer de consument ITableDefinition::CreateTable, en de waarde van de DBPROP_TBL_TEMPTABLE-eigenschap VARIANT_TRUE is, genereert de OLE DB Driver voor SQL Server een tijdelijke tabelnaam voor de consument. De consument zet de pTableID-parameter van de CreateTable-methode op NULL. De tijdelijke tabellen met namen die door de OLE DB-driver voor SQL Server worden gegenereerd, verschijnen niet in de TABLES-rijset , maar zijn toegankelijk via de IOpenRowset-interface .
Wanneer consumenten de tabelnaam specificeren in het pwszName-lid van de uName-unie in de pTableID-parameter , maakt de OLE DB-driver voor SQL Server een SQL Server-tabel met die naam aan. SQL Server-tabelnaambeperkingen zijn van toepassing, en de tabelnaam kan een permanente tabel aanduiden, of een lokale of globale tijdelijke tabel. Zie CREATE TABLEvoor meer informatie. De ppTableID-parameter kan NULL zijn.
De OLE DB Driver voor SQL Server kan de namen genereren van permanente of tijdelijke tabellen. Wanneer de consument de pTableID-parameter op NULL zet en ppTableID zet om naar een geldige DBID* te verwijzen, geeft de OLE DB-driver voor SQL Server de gegenereerde naam van de tabel terug in het pwszName-lid van de uName-unie van de DBID waarnaar wordt verwezen door de waarde ppTableID. Om een tijdelijke OLE DB-driver te creëren voor SQL Server-named table, neemt de consument de OLE DB-tabeleigenschap DBPROP_TBL_TEMPTABLE op in een tabel-eigenschapsset die wordt aangeduid in de rgPropertySets-parameter . OLE DB-driver voor tijdelijke tabellen met een naam SQL Server-naam zijn lokaal.
CreateTable geeft DB_E_BADTABLEID terug als het eKind-lid van de pTableID-parameter niet DBKIND_NAME aangeeft.
DBCOLUMNDESC-gebruik
De consument kan een kolomgegevenstype aangeven door gebruik te maken van het pwszTypeName-lid of het wType-lid . Als de consument het datatype specificeert in pwszTypeName, negeert de OLE DB-driver voor SQL Server de waarde van wType.
Bij gebruik van het pwszTypeName-lid , specificeert de consument het datatype door gebruik te maken van SQL Server-datatypenamen. Geldige datatypenamen zijn die welke worden teruggegeven in de TYPE_NAME kolom van de PROVIDER_TYPES schema-rijset.
De OLE DB Driver voor SQL Server herkent een deelverzameling van OLE DB-enumerated DBTYPE-waarden in het wType-lid . Voor meer informatie, zie Data Type Mapping in ITableDefinition.
Opmerking
CreateTable geeft DB_E_BADTYPE terug als de consument het pTypeInfo- of pclsid-lid instelt om het kolomdatatype te specificeren.
De consument specificeert de kolomnaam in het pwszName-lid van de uName-unie van het DBCOLUMNDESC dbcid-lid . De kolomnaam wordt gespecificeerd als een Unicode-tekenreeks. Het eKind-lid van dbcid moet DBKIND_NAME zijn. CreateTable geeft DB_E_BADCOLUMNID terug als eKind ongeldig is, pwszName NULL is, of als de waarde van pwszName geen geldige SQL Server-identificatie is.
Alle kolomeigenschappen zijn beschikbaar op alle kolommen die voor de tabel zijn gedefinieerd. CreateTable kan DB_S_ERRORSOCCURRED of DB_E_ERRORSOCCURRED teruggeven als de eigenschappenwaarden in conflict zijn gezet. CreateTable geeft een foutmelding wanneer ongeldige kolom-eigenschapsinstellingen een fout veroorzaken bij het aanmaken van SQL Server-tabelen.
Kolomeigenschappen in een DBCOLUMNDESC worden als volgt geïnterpreteerd.
| Eigenschaps-id | Description |
|---|---|
| DBPROP_COL_AUTOINCREMENT | R/W: Lezen/schrijven Standaard: VARIANT_FALSE Beschrijving: Stelt de identiteitseigenschap in op de aangemaakte kolom. Voor SQL Server is de identiteitseigenschap geldig voor één enkele kolom binnen een tabel. Het instellen van de eigenschap op VARIANT_TRUE voor meer dan één kolom genereert een fout wanneer de OLE DB Driver voor SQL Server probeert de tabel op de server te maken. De SQL Server-identiteitseigenschap is alleen geldig voor de gehele typen, numeriek en decimale wanneer de schaal 0 is. Het instellen van de eigenschap op VARIANT_TRUE op een kolom van een ander datatype genereert een fout wanneer de OLE DB-driver voor SQL Server probeert de tabel op de server te maken. De OLE DB Driver voor SQL Server geeft DB_S_ERRORSOCCURRED terug wanneer zowel DBPROP_COL_AUTOINCREMENT als DBPROP_COL_NULLABLE VARIANT_TRUE zijn en de dwOption van DBPROP_COL_NULLABLE niet DBPROPOPTIONS_REQUIRED. DB_E_ERRORSOCCURRED wordt teruggegeven wanneer DBPROP_COL_AUTOINCREMENT en DBPROP_COL_NULLABLE beide VARIANT_TRUE zijn en de dwOptie van DBPROP_COL_NULLABLE gelijk is aan DBPROPOPTIONS_REQUIRED. De kolom wordt gedefinieerd met de eigenschap SQL Server identiteit en het DBPROP_COL_NULLABLE dwStatus-lid wordt ingesteld op DBPROPSTATUS_CONFLICTING. |
| DBPROP_COL_DEFAULT | R/W: Lezen/schrijven Standaard: Geen Beschrijving: Maakt een SQL Server DEFAULT-constraint aan voor de kolom. Het vValue DBPROP-lid kan uit verschillende typen bestaan. Het vValue.vt-lid moet een type specificeren dat compatibel is met het datatype van de kolom. Bijvoorbeeld, het definiëren van BSTR N/A als standaardwaarde voor een kolom gedefinieerd als DBTYPE_WSTR is een compatibele match. Het definiëren van dezelfde standaard op een kolom die als DBTYPE_R8 is gedefinieerd, genereert een foutmelding wanneer de OLE DB-driver voor SQL Server probeert de tabel op de server aan te maken. |
| DBPROP_COL_DESCRIPTION | R/W: Lezen/schrijven Standaard: Geen Beschrijving: De eigenschap DBPROP_COL_DESCRIPTION kolom is niet geïmplementeerd door de OLE DB-driver voor SQL Server. Het dwStatus-lid van de DBPROP-structuur geeft DBPROPSTATUS_NOTSUPPORTED terug wanneer de consument probeert de eigenschapswaarde te schrijven. Het instellen van de eigenschap vormt geen fatale fout voor de OLE DB-driver voor SQL Server. Als alle andere parameterwaarden geldig zijn, wordt de SQL Server-tabel aangemaakt. |
| DBPROP_COL_FIXEDLENGTH | R/W: Lezen/schrijven Standaard: VARIANT_FALSE Beschrijving: De OLE DB-driver voor SQL Server gebruikt DBPROP_COL_FIXEDLENGTH om datatype-mapping te bepalen wanneer de consument het datatype van een kolom definieert door gebruik te maken van het wType-lid van de DBCOLUMNDESC. Voor meer informatie, zie Data Type Mapping in ITableDefinition. |
| DBPROP_COL_NULLABLE | R/W: Lezen/schrijven Standaard: Geen Beschrijving: Bij het aanmaken van de tabel geeft de OLE DB-driver voor SQL Server aan of de kolom nullwaarden moet accepteren als de eigenschap is ingesteld. Wanneer de eigenschap niet is ingesteld, wordt de mogelijkheid van de kolom om NULL als waarde te accepteren bepaald door de standaard databaseoptie van SQL Server ANSI_NULLS. De OLE DB Driver voor SQL Server is een ISO-conforme provider. Verbonden sessies vertonen ISO-gedrag. Als de consument DBPROP_COL_NULLABLE niet instelt, accepteren kolommen null-waarden. |
| DBPROP_COL_PRIMARYKEY | R/W: Lezen/schrijven Standaard: VARIANT_FALSE Beschrijving: Wanneer VARIANT_TRUE, maakt de OLE DB Driver voor SQL Server de kolom met een PRIMARY KEY-beperking aan. Wanneer gedefinieerd als een kolomeigenschap, kan slechts één kolom de beperking bepalen. Het instellen van de eigenschap VARIANT_TRUE voor meer dan één kolom geeft een foutmelding wanneer de OLE DB Driver voor SQL Server probeert de SQL Server-tabel te maken. Opmerking: De consument kan IIndexDefinition::CreateIndex gebruiken om een PRIMARY KEY-beperking te creëren op twee of meer kolommen. De OLE DB Driver voor SQL Server geeft DB_S_ERRORSOCCURRED terug wanneer zowel DBPROP_COL_PRIMARYKEY als DBPROP_COL_UNIQUE VARIANT_TRUE zijn en de dwOption van DBPROP_COL_UNIQUE niet DBPROPOPTIONS_REQUIRED is. DB_E_ERRORSOCCURRED wordt teruggegeven wanneer DBPROP_COL_PRIMARYKEY en DBPROP_COL_UNIQUE beide VARIANT_TRUE zijn en de dw-optie van DBPROP_COL_UNIQUE gelijk is aan DBPROPOPTIONS_REQUIRED. De kolom wordt gedefinieerd met de eigenschap SQL Server-identiteit en het DBPROP_COL_PRIMARYKEY dwStatus-lid is ingesteld op DBPROPSTATUS_CONFLICTING. De OLE DB-driver voor SQL Server geeft een foutmelding wanneer DBPROP_COL_PRIMARYKEY en DBPROP_COL_NULLABLE beide VARIANT_TRUE zijn. De OLE DB Driver voor SQL Server geeft een foutmelding van SQL Server wanneer de consument probeert een PRIMARY KEY-constraint te creëren op een kolom met ongeldig SQL Server-datatype. PRIMARY KEY-beperkingen kunnen niet worden gedefinieerd op kolommen die zijn aangemaakt met de SQL Server-datatypes bit, tekst, ntext en afbeelding. |
| DBPROP_COL_UNIQUE | R/W: Lezen/schrijven Standaard: VARIANT_FALSE Beschrijving: Past een SQL Server UNIQUE-constraint toe op de kolom. Wanneer gedefinieerd als een kolomeigenschap, wordt de beperking alleen toegepast op één kolom. De consument kan IIndexDefinition::CreateIndex gebruiken om een UNIEKE beperking toe te passen op de gecombineerde waarden van twee of meer kolommen. De OLE DB Driver voor SQL Server geeft DB_S_ERRORSOCCURRED terug wanneer zowel DBPROP_COL_PRIMARYKEY als DBPROP_COL_UNIQUE VARIANT_TRUE zijn en dwOption niet DBPROPOPTIONS_REQUIRED. DB_E_ERRORSOCCURRED wordt teruggegeven wanneer DBPROP_COL_PRIMARYKEY en DBPROP_COL_UNIQUE beide VARIANT_TRUE zijn en dwOption gelijk is aan DBPROPOPTIONS_REQUIRED. De kolom wordt gedefinieerd met de eigenschap SQL Server-identiteit en het DBPROP_COL_PRIMARYKEY dwStatus-lid is ingesteld op DBPROPSTATUS_CONFLICTING. De OLE DB-driver voor SQL Server geeft DB_S_ERRORSOCCURRED terug wanneer DBPROP_COL_NULLABLE en DBPROP_COL_UNIQUE beide VARIANT_TRUE zijn en dwOption niet DBPROPOPTIONS_REQUIRED. DB_E_ERRORSOCCURRED wordt teruggegeven wanneer DBPROP_COL_NULLABLE en DBPROP_COL_UNIQUE beide VARIANT_TRUE zijn en dwOption gelijk is aan DBPROPOPTIONS_REQUIRED. De kolom wordt gedefinieerd met de eigenschap SQL Server identiteit en het DBPROP_COL_NULLABLE dwStatus-lid wordt ingesteld op DBPROPSTATUS_CONFLICTING. De OLE DB Driver voor SQL Server geeft een foutmelding van SQL Server wanneer de consument probeert een UNIEKE constraint te creëren op een kolom met ongeldig SQL Server-datatype. UNIQUE-constraints kunnen niet worden gedefinieerd op kolommen die zijn gemaakt met het SQL Server-bitdatatype . |
Wanneer de consument ITableDefinition::CreateTable aanroept, interpreteert de OLE DB-driver voor SQL Server de tabeleigenschappen als volgt.
| Eigenschaps-id | Description |
|---|---|
| DBPROP_TBL_TEMPTABLE | R/W: Lezen/schrijven Standaard: VARIANT_FALSE Beschrijving: Standaard maakt de OLE DB-driver voor SQL Server tabellen aan die door de consument zijn benoemd. Wanneer VARIANT_TRUE, genereert de OLE DB Driver voor SQL Server een tijdelijke tabelnaam voor de consument. De consument zet de pTableID-parameter van CreateTable op NULL. De ppTableID-parameter moet een geldige pointer bevatten. |
Als de consument verzoekt om een rijset te openen op een succesvol gemaakte tabel, opent de OLE DB-driver voor SQL Server een door de cursor ondersteunde rijset. Eventuele eigenschappen van rijsets kunnen worden aangegeven in de doorgegeven eigenschappen.
Dit voorbeeld maakt een SQL Server-tabel aan.
// 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);
}