Tworzenie tabel serwera SQL
The SQL Server Native klient OLE DB dostawca exposes the ITableDefinition::CreateTable funkcja, allowing consumers to create SQL Server tables. Użyj konsumentów CreateTable , aby utworzyć na podstawie unikatowych nazw generowane przez konsumenta o nazwie stałe tabelami i tabelami stałego lub tymczasowegoSQL Server Macierzystego dostawca klient OLE DB.
Gdy wywołuje konsumenta ITableDefinition::CreateTable, jeśli wartość właściwość DBPROP_TBL_TEMPTABLE VARIANT_TRUE SQL Server Macierzystego dostawca klient OLE DB generuje nazwy tabela tymczasowa dla konsumenta. Zestawy konsumenta pTableID parametrCreateTable metoda na wartość NULL.Tabele tymczasowe z nazwy generowane przez SQL Server Macierzystego dostawca klient OLE DB nie są wyświetlane w TABELE zestawu zestaw wierszy, ale są dostępne za pośrednictwem IOpenRowset interfejs.
When consumers specify the table name in the pwszName member of the uName union in the pTableID parameter, the SQL Server Native Client OLE DB provider creates a SQL Server table with that name.SQL Server table naming constraints apply, and the table name can indicate a permanent table, or either a local or global temporary table.Aby uzyskać więcej informacji zobacz TWORZENIE tabela.The ppTableID parameter can be NULL.
The SQL Server Native klient OLE DB dostawca can generate the names of permanent or temporary tables. Jeżeli konsument ustawia pTableID wartości NULL i zestawy parametrppTableID wskaż prawidłowy identyfikator DBID *, SQL Server Macierzystego dostawca klient OLE DB zwraca wygenerowany nazwę tabela w pwszName element członkowski członkowskiuName związek identyfikator DBID wskazywanej przez wartość ppTableID.Aby utworzyć tymczasowy, SQL Server Macierzysta klient OLE DB tabela o nazwie dostawca, konsument zawiera właściwość tabela bazy danych OLE DBPROP_TBL_TEMPTABLE we właściwości tabela, zestaw, do którego istnieje odwołanie w rgPropertySets parametr.SQL Server Macierzysta klient OLE DB dostawca o nazwie tabele tymczasowe są lokalne.
CreateTable zwraca DB_E_BADTABLEID, jeśli eKind element członkowski członkowskipTableID parametr nie ma informacji DBKIND_NAME.
Użycie DBCOLUMNDESC
Konsument może wskazywać typ danych kolumna przy użyciu formatu pwszTypeName element członkowski członkowski lub wType element członkowski członkowski.Jeżeli konsument Określa typ danych pwszTypeName, the SQL Server Macierzystego dostawca klient OLE DB ignoruje wartość wType.
Jeśli przy użyciu pwszTypeName element członkowski członkowski, konsument Określa typ danych przy użyciu SQL Server nazwy typów danych. Nazwy typów prawidłowe dane są zwracane kolumna TYPE_NAME PROVIDER_TYPES zestaw wierszy schematu.
The SQL Server Native klient OLE DB dostawca recognizes a podzbiór of OLE DB-enumerated DBTYPE values in the wType element członkowski.Aby uzyskać więcej informacji zobaczMapowanie typu danych w ITableDefinition.
Uwaga
CreateTable zwraca DB_E_BADTYPE, jeżeli konsument ustawia albo pTypeInfo or pclsid element członkowski, aby określić typ danych kolumna.
Konsument Określa nazwę kolumna w pwszName element członkowski członkowskiuName DBCOLUMNDESC związekdbcid element członkowski członkowski.Nazwa kolumna jest określany jako ciąg znaków Unicode.The eKind element członkowski of dbcid must be DBKIND_NAME.CreateTable zwraca DB_E_BADCOLUMNID, jeśli eKind jest nieprawidłowy, pwszName ma wartość NULL, lub, jeśli wartość pwszName nie jest prawidłowym SQL Server identyfikator.
Wszystkie kolumna właściwości są dostępne na wszystkich kolumna s zdefiniowanych dla tabela.CreateTable może zwracać DB_S_ERRORSOCCURRED lub DB_E_ERRORSOCCURRED, jeśli wartości właściwość są ustawiane w konflikcie.CreateTable zwraca błąd, gdy nieprawidłowy kolumna spowodować, że ustawienia właściwośćSQL Server Błąd tworzenia tabela.
Właściwości kolumn w DBCOLUMNDESC są interpretowane w następujący sposób.
Identyfikator właściwość |
Description |
|---|---|
DBPROP_COL_AUTOINCREMENT |
R/W: Właściwość do odczytu i zapisu Wartość domyślna: Opis VARIANT_FALSE: Ustawia właściwość tożsamości kolumna utworzony. Dla SQL Server, właściwość tożsamości jest prawidłowa dla pojedynczej kolumna w tabela. Ustawienie właściwość VARIANT_TRUE dla więcej niż jedną kolumna generuje błąd, gdy SQL Server Macierzystego dostawca klient OLE DB próbuje utworzyć tabela na serwerze. The SQL Server właściwość tożsamości is only valid for the integer, numeric, and decimal types when the scale is 0.Ustawienie właściwość dla dowolnego typu danych kolumna VARIANT_TRUE generuje błąd, gdy SQL Server Macierzystego dostawca klient OLE DB próbuje utworzyć tabela na serwerze. The SQL Server Native klient OLE DB dostawca returns DB_S_ERRORSOCCURRED when DBPROP_COL_AUTOINCREMENT and DBPROP_COL_NULLABLE are both VARIANT_TRUE and the dwOption of DBPROP_COL_NULLABLE is not DBPROPOPTIONS_REQUIRED.DB_E_ERRORSOCCURRED jest zwracana, gdy są oba VARIANT_TRUE DBPROP_COL_AUTOINCREMENT i DBPROP_COL_NULLABLE oraz dwOption DBPROP_COL_NULLABLE jest równe DBPROPOPTIONS_REQUIRED.kolumna zdefiniowano z SQL Server Właściwość tożsamości i DBPROP_COL_NULLABLE dwStatus element członkowski jest ustawiony na DBPROPSTATUS_CONFLICTING. |
DBPROP_COL_DEFAULT |
R/W: Właściwość do odczytu i zapisu Wartość domyślna: Brak Opis: Tworzy SQL Server DEFAULT ograniczenia dla kolumna. The vValue DBPROP element członkowski can be any of a number of types.The vValue.vt element członkowski should specify a type compatible with the data type of the kolumna.Na przykład Definiowanie Brak BSTR jako wartość domyślną dla kolumna zdefiniowane jako DBTYPE_WSTR jest zgodny dopasowania.Definiowane są wartości domyślne tej samej kolumna zdefiniowane DBTYPE_R8 generuje błąd, gdy SQL Server Macierzystego dostawca klient OLE DB próbuje utworzyć tabela na serwerze. |
DBPROP_COL_DESCRIPTION |
R/W: Właściwość do odczytu i zapisu Wartość domyślna: Brak Opis: właściwość kolumna DBPROP_COL_DESCRIPTION nie jest implementowana przez SQL Server Macierzystego dostawca klient OLE DB. The dwStatus element członkowski of the DBPROP structure returns DBPROPSTATUS_NOTSUPPORTED when the consumer attempts to write the właściwość value. Ustawienie właściwość nie stanowi błąd krytyczny dla SQL Server Macierzystego dostawca klient OLE DB. Jeśli wszystkie inne wartości parametrów są prawidłowe, SQL Server Tabela zostanie utworzona. |
DBPROP_COL_FIXEDLENGTH |
R/W: Właściwość do odczytu i zapisu Wartość domyślna: VARIANT_FALSE Opis: The SQL Server Macierzystego dostawca klient OLE DB używa DBPROP_COL_FIXEDLENGTH w celu określenia mapowania typów danych, jeżeli konsument definiuje typ danych kolumna przy użyciu wType składnik DBCOLUMNDESC.Aby uzyskać więcej informacji zobaczMapowanie typu danych w ITableDefinition. |
DBPROP_COL_NULLABLE |
R/W: Właściwość do odczytu i zapisu Wartość domyślna: Brak Opis: Podczas tworzenia tabela SQL Server Macierzystego dostawca klient OLE DB wskazuje, czy kolumna powinna obsługiwać wartości null, jeśli właściwość jest zestaw. Jeśli właściwość nie jest zestaw, możliwość kolumna akceptują wartości NULL jako wartość jest określana przez SQL Server ANSI_NULLS domyślna opcja bazy danych. The SQL Server Native klient OLE DB dostawca is an ISO-compliant dostawca. Podłączonych sesji może zawierać zachowania ISO.Jeżeli konsument nie ustawia DBPROP_COL_NULLABLE, kolumny akceptują wartości null. |
DBPROP_COL_PRIMARYKEY |
R/W: Właściwość do odczytu i zapisu Wartość domyślna: Opis VARIANT_FALSE: Gdy VARIANT_TRUE SQL Server Macierzystego dostawca klient OLE DB tworzy kolumna z ograniczenia klucz podstawowy. Gdy zdefiniowane jako właściwość kolumna, tylko jedną kolumna można określić ograniczenia.Ustawienie właściwość VARIANT_TRUE dla więcej niż jedną kolumna zwraca błąd, gdy SQL Server Macierzystego dostawca klient OLE DB próbuje utworzyć SQL Server Tabela. Uwaga: Konsument może używać IIndexDefinition::CreateIndex utworzyć ograniczenia klucz podstawowy na dwóch lub większej liczbie kolumn. The SQL Server Native klient OLE DB dostawca returns DB_S_ERRORSOCCURRED when DBPROP_COL_PRIMARYKEY and DBPROP_COL_UNIQUE are both VARIANT_TRUE and the dwOption of DBPROP_COL_UNIQUE is not DBPROPOPTIONS_REQUIRED. DB_E_ERRORSOCCURRED jest zwracana, gdy są oba VARIANT_TRUE DBPROP_COL_PRIMARYKEY i DBPROP_COL_UNIQUE oraz dwOption DBPROP_COL_UNIQUE jest równe DBPROPOPTIONS_REQUIRED.kolumna zdefiniowano z SQL Server Właściwość tożsamości i DBPROP_COL_PRIMARYKEY dwStatus jest zestaw do DBPROPSTATUS_CONFLICTING. The SQL Server Native klient OLE DB dostawca returns an error when DBPROP_COL_PRIMARYKEY and DBPROP_COL_NULLABLE are both VARIANT_TRUE. The SQL Server Native klient OLE DB dostawca returns an error from SQL Server when the consumer attempts to create a klucz podstawowy constraint on a kolumna of invalid SQL Server data type. Ograniczenia klucz podstawowy nie mogą być definiowane na podstawie kolumn utworzonych za pomocą SQL Server typy danych bit, tekst, ntext, and obraz. |
DBPROP_COL_UNIQUE |
R/W: Właściwość do odczytu i zapisu Wartość domyślna: Opis VARIANT_FALSE: DotyczySQL Server Ograniczenia UNIQUE do kolumna. Zdefiniowane jako właściwość kolumna ograniczenie dotyczy tylko jedną kolumna.Konsument może używać IIndexDefinition::CreateIndex zastosować ograniczenie typu UNIQUE wartości połączone z co najmniej dwóch kolumnach. The SQL Server Native klient OLE DB dostawca returns DB_S_ERRORSOCCURRED when DBPROP_COL_PRIMARYKEY and DBPROP_COL_UNIQUE are both VARIANT_TRUE and dwOption is not DBPROPOPTIONS_REQUIRED. DB_E_ERRORSOCCURRED jest zwracana, gdy są oba VARIANT_TRUE DBPROP_COL_PRIMARYKEY i DBPROP_COL_UNIQUE i dwOption jest równe DBPROPOPTIONS_REQUIRED.kolumna zdefiniowano z SQL Server Właściwość tożsamości i DBPROP_COL_PRIMARYKEY dwStatus jest zestaw do DBPROPSTATUS_CONFLICTING. The SQL Server Native klient OLE DB dostawca returns DB_S_ERRORSOCCURRED when DBPROP_COL_NULLABLE and DBPROP_COL_UNIQUE are both VARIANT_TRUE and dwOption is not DBPROPOPTIONS_REQUIRED. DB_E_ERRORSOCCURRED jest zwracana, gdy są oba VARIANT_TRUE DBPROP_COL_NULLABLE i DBPROP_COL_UNIQUE i dwOption jest równe DBPROPOPTIONS_REQUIRED.kolumna zdefiniowano z SQL Server Właściwość tożsamości i DBPROP_COL_NULLABLE dwStatus element członkowski jest ustawiony na DBPROPSTATUS_CONFLICTING. The SQL Server Native klient OLE DB dostawca returns an error from SQL Server when the consumer attempts to create a UNIQUE constraint on a kolumna of invalid SQL Server data type. UNIQUE constraints cannot be defined on columns created with the SQL Serverbit data type. |
Gdy wywołuje konsumenta ITableDefinition::CreateTable, the SQL Server Macierzystego dostawca klient OLE DB interpretuje tabela właściwości w następujący sposób.
Identyfikator właściwość |
Description |
|---|---|
DBPROP_TBL_TEMPTABLE |
R/W: Właściwość do odczytu i zapisu Wartość domyślna: Opis VARIANT_FALSE: Domyślnie, SQL Server Macierzystego dostawca klient OLE DB tworzy tabele o nazwach przez odbiorcę. Gdy VARIANT_TRUE, SQL Server Macierzystego dostawca klient OLE DB generuje nazwy tabela tymczasowa dla konsumenta. Zestawy konsumenta pTableID parametrCreateTable null.The ppTableID parameter must contain a valid pointer. |
Jeżeli konsument żąda zestawu zestaw wierszy był otwierany pomyślnie utworzonej tabela SQL Server Macierzystego dostawca klient OLE DB powoduje otwarcie zestawu zestaw wierszy obsługiwane kursor. Wszystkie właściwość zestaw wierszy mogą być wskazywane na zestawy właściwość, przekazywane.
W tym przykładzie tworzony SQL Server Tabela.
// 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);
}