Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí na:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytický platformový systém (PDW)
SQL databáze v Microsoft Fabric
Ovladač OLE DB pro SQL Server zpřístupňuje funkci ITableDefinition::CreateTable , která umožňuje uživatelům vytvářet tabulky SQL Serveru. Spotřebitelé používají CreateTable k vytváření trvalých tabulek pojmenovaných uživateli a trvalých či dočasných tabulek s unikátními názvy generovanými ovladačem OLE DB pro SQL Server.
Když uživatel volá ITableDefinition::CreateTable, pokud je hodnota vlastnosti DBPROP_TBL_TEMPTABLE VARIANT_TRUE, OLE DB Driver pro SQL Server vygeneruje pro uživatele dočasné jméno tabulky. Spotřebitel nastaví parametr pTableID metody CreateTable na NULL. Dočasné tabulky s názvy generovanými ovladačem OLE DB pro SQL Server se v řádku TABLES neobjevují, ale jsou přístupné přes rozhraní IOpenRowset .
Když spotřebitelé zadají název tabulky v členu pwszName sjednocení uName v parametru pTableID , OLE DB Driver pro SQL Server vytvoří tabulku SQL Server s tímto názvem. Platí omezení pojmenování tabulek v SQL Serveru a název tabulky může označovat trvalou tabulku, případně lokální či globální dočasnou tabulku. Další informace naleznete v tématu CREATE TABLE. Parametr ppTableID může být NULL.
Ovladač OLE DB pro SQL Server dokáže generovat názvy trvalých nebo dočasných tabulek. Když uživatel nastaví parametr pTableID na NULL a ppTableID tak, aby ukazoval na platné DBID*, OLE DB Driver pro SQL Server vrátí generovaný název tabulky v členu pwszName sjednocení uName DBID, na kterou ukazuje hodnota ppTableID. Pro vytvoření dočasného OLE DB Driver for SQL Server pojmenovaného table uživatel zahrne vlastnost OLE DB table DBPROP_TBL_TEMPTABLE do sady vlastností tabulky, na kterou odkazuje parametr rgPropertySets . OLE DB Driver pro SQL Server pojmenované dočasné tabulky jsou lokální.
CreateTable vrací DB_E_BADTABLEID, pokud člen eKind parametru pTableID neoznačuje DBKIND_NAME.
Použití DBCOLUMNDESC
Spotřebitel může označit typ dat sloupce buď pomocí člena pwszTypeName, nebo člena wType. Pokud uživatel zadá datový typ v pwszTypeName, ovladač OLE DB pro SQL Server ignoruje hodnotu wType.
Pokud se používá člen pwszTypeName , uživatel specifikuje datový typ pomocí názvů datových typů SQL Server. Platné názvy datových typů jsou ty, které se vracejí ve sloupci TYPE_NAME řádkové sady PROVIDER_TYPES schématu.
Ovladač OLE DB pro SQL Server rozpoznává podmnožinu hodnot DB enumerovaných v rámci wType člena. Pro více informací viz Mapování datových typů v ITableDefinition.
Poznámka:
CreateTable vrací DB_E_BADTYPE, pokud spotřebitel nastaví buď člena pTypeInfo nebo pclsid pro určení datového typu sloupce.
Spotřebitel určuje název sloupce v členu pwszName v unii uName člena DBCOLUMNDESC dbcid . Název sloupce je zadán jako znak v Unicode. EKind člen dbcid musí být DBKIND_NAME. CreateTable vrací DB_E_BADCOLUMNID pokud je eKind neplatný, pwszName je NULL, nebo pokud hodnota pwszName není platným identifikátorem SQL Serveru.
Všechny vlastnosti sloupců jsou dostupné ve všech sloupcích definovaných pro tabulku. CreateTable může vrátit DB_S_ERRORSOCCURRED nebo DB_E_ERRORSOCCURRED, pokud jsou hodnoty vlastností nastaveny v konfliktu. CreateTable vrací chybu, když neplatné nastavení vlastností sloupců způsobí selhání tvorby tabulek v SQL Serveru.
Vlastnosti sloupců v DBCOLUMNDESC se interpretují následovně.
| ID vlastnosti | Description |
|---|---|
| DBPROP_COL_AUTOINCREMENT | R/W: Čtení/zápis Výchozí: VARIANT_FALSE Popis: Nastavuje vlastnost identity na vytvořeném sloupci. Pro SQL Server je vlastnost identity platná pro jeden sloupec v tabulce. Nastavení vlastnosti na VARIANT_TRUE více než jeden sloupec způsobí chybu, když se OLE DB Driver pro SQL Server pokusí vytvořit tabulku na serveru. Identitní vlastnost SQL Serveru platí pouze pro celočíselné, číselné a desetinné typy, pokud je měřítko 0. Nastavení vlastnosti na VARIANT_TRUE ve sloupci jakéhokoli jiného datového typu generuje chybu, když se OLE DB Driver pro SQL Server pokusí vytvořit tabulku na serveru. Ovladač OLE DB pro SQL Server DB_S_ERRORSOCCURRED vrátí, když jsou DBPROP_COL_AUTOINCREMENT i DBPROP_COL_NULLABLE oba VARIANT_TRUE a dwOption DBPROP_COL_NULLABLE není DBPROPOPTIONS_REQUIRED. DB_E_ERRORSOCCURRED se vrátí, když jsou DBPROP_COL_AUTOINCREMENT a DBPROP_COL_NULLABLE oba VARIANT_TRUE a dwOption DBPROP_COL_NULLABLE je DBPROPOPTIONS_REQUIRED. Sloupec je definován pomocí identity vlastnosti SQL Server a člen DBPROP_COL_NULLABLE dwStatus je nastaven na DBPROPSTATUS_CONFLICTING. |
| DBPROP_COL_DEFAULT | R/W: Čtení/zápis Žádné výchozí nastavení Popis: Vytváří SQL Server VÝCHOZÍ omezení pro sloupec. Člen vValue DBPROP může být libovolného typu. Člen vValue.vt by měl specifikovat typ kompatibilní s datovým typem sloupce. Například definování BSTR N/A jako výchozí hodnoty pro sloupec definovaný jako DBTYPE_WSTR je kompatibilní shoda. Definování stejné výchozí hodnoty ve sloupci definovaném jako DBTYPE_R8 generuje chybu, když se OLE DB Driver pro SQL Server pokusí vytvořit tabulku na serveru. |
| DBPROP_COL_DESCRIPTION | R/W: Čtení/zápis Žádné výchozí nastavení Popis: Vlastnost sloupce DBPROP_COL_DESCRIPTION není implementována ovladačem OLE DB pro SQL Server. Člen dwStatus ve struktuře DBPROP vrací DBPROPSTATUS_NOTSUPPORTED, když se spotřebitel pokusí napsat hodnotu vlastnosti. Nastavení vlastnosti nepředstavuje fatální chybu pro OLE DB ovladač pro SQL Server. Pokud jsou všechny ostatní hodnoty parametrů platné, vytvoří se tabulka SQL Serveru. |
| DBPROP_COL_FIXEDLENGTH | R/W: Čtení/zápis Výchozí: VARIANT_FALSE Popis: Ovladač OLE DB pro SQL Server používá DBPROP_COL_FIXEDLENGTH k určení mapování datového typu, když uživatel definuje datový typ sloupce pomocí člena wType v DBCOLUMNDESC. Pro více informací viz Mapování datových typů v ITableDefinition. |
| DBPROP_COL_NULLABLE | R/W: Čtení/zápis Žádné výchozí nastavení Popis: Při vytváření tabulky ovladač OLE DB pro SQL Server indikuje, zda by sloupec měl přijímat nulové hodnoty, pokud je vlastnost nastavena. Pokud vlastnost není nastavena, schopnost sloupce přijmout NULL jako hodnotu je určena výchozí volbou SQL Serveru ANSI_NULLS databáze. OLE DB Driver pro SQL Server je poskytovatel kompatibilní s ISO. Propojené relace vykazují chování ISO. Pokud spotřebitel nenastaví DBPROP_COL_NULLABLE, sloupce přijímají nulové hodnoty. |
| DBPROP_COL_PRIMARYKEY | R/W: Čtení/zápis Výchozí: VARIANT_FALSE Popis: Při VARIANT_TRUE vytvoří OLE DB ovladač pro SQL Server sloupec s omezením PRIMÁRNÍ KLÍČ. Pokud je definována jako vlastnost sloupce, pouze jeden sloupec může určit omezení. Nastavení vlastnosti VARIANT_TRUE na více než jeden sloupec vrátí chybu, když se OLE DB Driver pro SQL Server pokusí vytvořit tabulku SQL Server. Poznámka: Spotřebitel může použít IIndexDefinition::CreateIndex k vytvoření omezení PRIMÁRNÍHO KLÍČE pro dva nebo více sloupců. Ovladač OLE DB pro SQL Server vrací DB_S_ERRORSOCCURRED, když jsou DBPROP_COL_PRIMARYKEY i DBPROP_COL_UNIQUE oba VARIANT_TRUE a dwOption DBPROP_COL_UNIQUE není DBPROPOPTIONS_REQUIRED. DB_E_ERRORSOCCURRED se vrátí, když jsou DBPROP_COL_PRIMARYKEY a DBPROP_COL_UNIQUE oba VARIANT_TRUE a dwOption DBPROP_COL_UNIQUE je rovna DBPROPOPTIONS_REQUIRED. Sloupec je definován pomocí identity vlastnosti SQL Server a člen DBPROP_COL_PRIMARYKEY dwStatus je nastaven na DBPROPSTATUS_CONFLICTING. Ovladač OLE DB pro SQL Server vrací chybu, když jsou DBPROP_COL_PRIMARYKEY i DBPROP_COL_NULLABLE oba VARIANT_TRUE. OLE DB Driver for SQL Server vrací chybu ze SQL Serveru, když se uživatel pokusí vytvořit omezení PRIMÁRNÍ KLÍČ na sloupci neplatného datového typu SQL Serveru. Omezení PRIMÁRNÍHO KLÍČE nelze definovat na sloupcích vytvořených pomocí datových typů SQL Serveru bit, text, ntext a image. |
| DBPROP_COL_UNIQUE | R/W: Čtení/zápis Výchozí: VARIANT_FALSE Popis: Aplikuje SQL Server UNIKÁTNÍ omezení na sloupec. Pokud je definováno jako vlastnost sloupce, omezení se aplikuje pouze na jeden sloupec. Spotřebitel může použít IIndexDefinition::CreateIndex k aplikaci UNIKÁTNÍHO omezení na kombinované hodnoty dvou nebo více sloupců. Ovladač OLE DB pro SQL Server vrací DB_S_ERRORSOCCURRED, když jsou DBPROP_COL_PRIMARYKEY i DBPROP_COL_UNIQUE oba VARIANT_TRUE a dwOption není DBPROPOPTIONS_REQUIRED. DB_E_ERRORSOCCURRED se vrátí, když jsou DBPROP_COL_PRIMARYKEY a DBPROP_COL_UNIQUE oba VARIANT_TRUE a dwOption se rovná DBPROPOPTIONS_REQUIRED. Sloupec je definován pomocí identity vlastnosti SQL Server a člen DBPROP_COL_PRIMARYKEY dwStatus je nastaven na DBPROPSTATUS_CONFLICTING. Ovladač OLE DB pro SQL Server DB_S_ERRORSOCCURRED vrací, když jsou DBPROP_COL_NULLABLE i DBPROP_COL_UNIQUE oba VARIANT_TRUE a dwOption není DBPROPOPTIONS_REQUIRED. DB_E_ERRORSOCCURRED se vrátí, když jsou DBPROP_COL_NULLABLE a DBPROP_COL_UNIQUE oba VARIANT_TRUE a dwOption se rovná DBPROPOPTIONS_REQUIRED. Sloupec je definován pomocí identity vlastnosti SQL Server a člen DBPROP_COL_NULLABLE dwStatus je nastaven na DBPROPSTATUS_CONFLICTING. Ovladač OLE DB pro SQL Server vrací chybu ze SQL Serveru, když se spotřebitel pokusí vytvořit UNIKÁTNÍ omezení na sloupec neplatného datového typu SQL Serveru. UNIKÁTNÍ omezení nelze definovat na sloupcích vytvořených pomocí datového typu SQL Serveru. |
Když uživatel volá ITableDefinition::CreateTable, OLE DB Driver pro SQL Server interpretuje vlastnosti tabulky následovně.
| ID vlastnosti | Description |
|---|---|
| DBPROP_TBL_TEMPTABLE | R/W: Čtení/zápis Výchozí: VARIANT_FALSE Popis: Ve výchozím nastavení vytváří OLE DB Driver pro SQL Server tabulky pojmenované uživatelem. Když VARIANT_TRUE, OLE DB Driver pro SQL Server vygeneruje pro uživatele dočasný název tabulky. Spotřebitel nastaví parametr pTableIDpro CreateTable na NULL. Parametr ppTableID musí obsahovat platný ukazatel. |
Pokud spotřebitel požádá o otevření sady řádků v úspěšně vytvořené tabulce, ovladač OLE DB pro SQL Server otevře sadu řádků podporovanou kurzorem. Vlastnosti sady řádků lze indikovat v předaných množinách vlastností.
Tento příklad vytváří tabulku SQL Serveru.
// 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);
}