Tworzenie tabel SQL Server
SQL Server Udostępnia macierzystym klienta dostawca OLE DB ITableDefinition::CreateTable funkcja pozwala utworzyć SQL Server tabele.Użyj konsumentów CreateTable do utworzenia tablic stałych o nazwie konsumenta i stałych lub tymczasowych tabel z unikatowych nazw generowane przez SQL Server macierzystego klienta OLE DB dostawca.
Gdy konsument wywołuje ITableDefinition::CreateTable, jeśli wartość właściwość DBPROP_TBL_TEMPTABLE jest VARIANT_TRUE, SQL Server generuje macierzystym klienta dostawca OLE DB tabela tymczasowa nazwa dla konsumenta.Zestawy konsumenta pTableID parametr CreateTable metoda null.Tabele tymczasowe z nazwami generowane przez SQL Server macierzystego klienta dostawca OLE DB nie są wyświetlane w tabel 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 tabeli.PpTableID parametr może być NULL.
SQL Server Macierzystego klienta dostawca OLE DB można generować nazwy tabel stałych lub tymczasowych.Gdy konsument ustawia pTableID parametr NULL i zestawy ppTableID aby wskazywało prawidłowy identyfikator DBID *, SQL Server macierzystym klienta dostawca OLE DB zwraca wygenerowany nazwę tabela w pwszName element członkowski uName Unii identyfikator DBID wskazywanego przez wartość ppTableID.Aby utworzyć tymczasowy, SQL Server macierzystego klienta OLE DB dostawca o nazwie tabela konsument zawiera właściwość tabela OLE DB DBPROP_TBL_TEMPTABLE właściwość tabela zestaw odwołanie w rgPropertyzestaws parametru.SQL ServerMacierzysta klienta OLE DB dostawca o nazwie tabel tymczasowych są lokalne.
CreateTable zwraca DB_E_BADTABLEID, jeśli eKind element członkowski pTableID parametru wskazuje DBKIND_NAME.
Użycie DBCOLUMNDESC
Konsument może wskazywać typ danych kolumna przy użyciu pwszTypeName element członkowski lub wType element członkowski.Jeśli konsument określa typ danych w pwszTypeName, SQL Server macierzystego klienta dostawca OLE DB ignoruje wartość wType.
Jeśli za pomocą pwszTypeName element członkowski, konsument określa typ danych za pomocą SQL Server Typ danych nazw.Nazwy typów prawidłowe dane są zwracane kolumna TYPE_NAME zestaw wierszy schematu PROVIDER_TYPES.
SQL Server Macierzystego klienta dostawca OLE DB rozpoznaje podzbiór wartości DBTYPE wyliczonych OLE DB w wType element członkowski.Aby uzyskać więcej informacji, zobacz Mapowanie typu danych w ITableDefinition.
Ostrzeżenie
CreateTable zwraca DB_E_BADTYPE, jeżeli konsument ustawia albo pTypeInfo lub pclsid element członkowski , aby określić typ danych kolumna.
Konsument Określa nazwę kolumna w pwszName element członkowski uName Unii z DBCOLUMNDESC dbcid Członkowskich.Nazwa kolumna jest określona jako ciąg znaków Unicode.EKind element członkowski dbcid musi być 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 właściwości kolumna są dostępne na wszystkich kolumn zdefiniowanych dla tabela.CreateTable zwrotu DB_S_ERRORSOCCURRED lub DB_E_ERRORSOCCURRED w przypadku wartości właściwość zestaw w konflikcie.CreateTable zwraca błąd, gdy ustawienia właściwość kolumna nieprawidłowy spowodować SQL Server Błąd tworzenia tabela.
Właściwości kolumny w DBCOLUMNDESC są interpretowane następująco.
Identyfikator właściwości |
Opis |
|---|---|
DBPROP_COL_AUTOINCREMENT |
R I W: Odczyt i zapis Wartość domyślna: VARIANT_FALSE opis: Ustawia właściwość tożsamości na kolumna utworzone.Dla SQL Server, właściwość tożsamości jest prawidłowa dla pojedynczej kolumna w tabela.Ustawienie właściwość na wartość inna niż VARIANT_TRUE na więcej niż jedną kolumna generuje błąd podczas SQL Server macierzystego klienta dostawca OLE DB próbuje utworzyć tabela na serwerze. SQL Serverwłaściwość tożsamości Jest prawidłowa tylko dla całkowitą, numeryczne, i dziesiętny typy, gdy skala jest 0.Ustawienie właściwość na wartość inna niż VARIANT_TRUE dla dowolnego typu danych kolumna generuje błąd podczas SQL Server macierzystego klienta dostawca OLE DB próbuje utworzyć tabela na serwerze. SQL Server Macierzystego klienta dostawca OLE DB zwraca DB_S_ERRORSOCCURRED, gdy są zarówno VARIANT_TRUE, DBPROP_COL_AUTOINCREMENT i DBPROP_COL_NULLABLE oraz dwOption DBPROP_COL_NULLABLE nie jest DBPROPOPTIONS_REQUIRED.DB_E_ERRORSOCCURRED jest zwracana, gdy są zarówno VARIANT_TRUE, DBPROP_COL_AUTOINCREMENT i DBPROP_COL_NULLABLE oraz dwOption z DBPROP_COL_NULLABLE jest równa DBPROPOPTIONS_REQUIRED.Kolumna jest zdefiniowana z SQL Server właściwość tożsamości i DBPROP_COL_NULLABLE dwStatus do DBPROPSTATUS_CONFLICTING jest zestaw element członkowski. |
DBPROP_COL_DEFAULT |
R I W: Odczyt i zapis Wartość domyślna: Brak Opis: Tworzy SQL Server domyślne ograniczenie dla kolumna. VValue DBPROP, element członkowski może być dowolną liczbę typów.VValue.vt element członkowski należy określić typ zgodny z typem danych kolumna.Na przykład Definiowanie Brak BSTR jako wartość domyślną dla kolumna zdefiniowane jako DBTYPE_WSTR jest dopasowanie zgodny.Definiowanie domyślnego tej samej kolumna zdefiniowane jako DBTYPE_R8 generuje błąd podczas SQL Server macierzystego klienta dostawca OLE DB próbuje utworzyć tabela na serwerze. |
DBPROP_COL_DESCRIPTION |
R I W: Odczyt i zapis Wartość domyślna: Brak Opis: właściwość DBPROP_COL_DESCRIPTION kolumna nie jest zaimplementowana przez SQL Server macierzystego klienta OLE DB dostawca. DwStatus element członkowski z DBPROP struktury zwraca DBPROPSTATUS_NOTSUPPORTED podczas próby zapisania wartości właściwość konsumenta. Ustawienie właściwość nie stanowi błąd krytyczny dla SQL Server macierzystego klienta OLE DB dostawca.Jeśli inne wartości parametrów są prawidłowe, SQL Server tworzona jest tabela. |
DBPROP_COL_FIXEDLENGTH |
R I W: Odczyt i zapis Wartość domyślna: VARIANT_FALSE Opis: SQL Server Macierzystego klienta dostawca OLE DB używa DBPROP_COL_FIXEDLENGTH do określenia mapowania typów danych, gdy konsument definiuje typ danych kolumna za pomocą wType element członkowski z DBCOLUMNDESC.Aby uzyskać więcej informacji, zobacz Mapowanie typu danych w ITableDefinition. |
DBPROP_COL_NULLABLE |
R I W: Odczyt i zapis Wartość domyślna: Brak Opis: Podczas tworzenia tabela, SQL Server macierzystego klienta dostawca OLE DB wskazuje, czy kolumna akceptuje 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. SQL Server Macierzystego klienta dostawca OLE DB jest standardem ISO dostawca.Podłączonych sesji wykazują zachowania ISO.Jeśli konsument nie jest zestaw DBPROP_COL_NULLABLE, kolumny akceptują wartości null. |
DBPROP_COL_PRIMARYKEY |
R I W: Odczyt i zapis Wartość domyślna: VARIANT_FALSE opis: Po VARIANT_TRUE, SQL Server macierzystego klienta dostawca OLE DB tworzy kolumna z ograniczenie klucza podstawowego. Zdefiniowane jako właściwość kolumna pojedynczej kolumna można określić ograniczenia.Ustawienie właściwość VARIANT_TRUE dla więcej niż jednego kolumna zwraca błąd, gdy SQL Server macierzystego klienta dostawca OLE DB próbuje utworzyć SQL Server tabela. Uwaga: Konsument może używać IIndexDefinition::CreateIndex utworzyć ograniczenie klucza podstawowego na dwóch lub więcej kolumn. SQL Server Macierzystego klienta dostawca OLE DB zwraca DB_S_ERRORSOCCURRED, gdy są zarówno VARIANT_TRUE, DBPROP_COL_PRIMARYKEY i DBPROP_COL_UNIQUE oraz dwOption DBPROP_COL_UNIQUE nie jest DBPROPOPTIONS_REQUIRED. DB_E_ERRORSOCCURRED jest zwracana, gdy są zarówno VARIANT_TRUE, DBPROP_COL_PRIMARYKEY i DBPROP_COL_UNIQUE oraz dwOption z DBPROP_COL_UNIQUE jest równa DBPROPOPTIONS_REQUIRED.Kolumna jest zdefiniowana z SQL Server właściwość tożsamości i DBPROP_COL_PRIMARYKEY dwStatus do DBPROPSTATUS_CONFLICTING jest zestaw element członkowski. SQL Server Macierzystego klienta dostawca OLE DB zwraca błąd podczas DBPROP_COL_PRIMARYKEY i DBPROP_COL_NULLABLE są zarówno VARIANT_TRUE. SQL Server Macierzystego klienta dostawca OLE DB zwraca błąd z SQL Server gdy konsument próbuje utworzyć ograniczenie klucza podstawowego dla kolumna nieprawidłowy SQL Server typu danych.Ograniczenia klucza podstawowego nie można zdefiniować na łamy utworzone za pomocą SQL Server typów danych bit, tekstu, ntext, i obrazu. |
DBPROP_COL_UNIQUE |
R I W: Odczyt i zapis Wartość domyślna: VARIANT_FALSE opis: Stosuje się SQL Server ograniczenie typu UNIQUE do kolumna. Zdefiniowane jako właściwość kolumna ograniczenie dotyczy tylko jednej kolumna.Konsument może używać IIndexDefinition::CreateIndex do zastosowania ograniczenia UNIQUE na połączone wartości dwóch lub więcej kolumn. SQL Server Macierzystego klienta dostawca OLE DB zwraca DB_S_ERRORSOCCURRED po DBPROP_COL_PRIMARYKEY i DBPROP_COL_UNIQUE są zarówno VARIANT_TRUE i dwOption nie jest DBPROPOPTIONS_REQUIRED. DB_E_ERRORSOCCURRED jest zwracana, gdy są zarówno VARIANT_TRUE, DBPROP_COL_PRIMARYKEY i DBPROP_COL_UNIQUE i dwOption jest równa DBPROPOPTIONS_REQUIRED.Kolumna jest zdefiniowana z SQL Server właściwość tożsamości i DBPROP_COL_PRIMARYKEY dwStatus do DBPROPSTATUS_CONFLICTING jest zestaw element członkowski. SQL Server Macierzystego klienta dostawca OLE DB zwraca DB_S_ERRORSOCCURRED po DBPROP_COL_NULLABLE i DBPROP_COL_UNIQUE są zarówno VARIANT_TRUE i dwOption nie jest DBPROPOPTIONS_REQUIRED. DB_E_ERRORSOCCURRED jest zwracana, gdy są zarówno VARIANT_TRUE, DBPROP_COL_NULLABLE i DBPROP_COL_UNIQUE i dwOption jest równa DBPROPOPTIONS_REQUIRED.Kolumna jest zdefiniowana z SQL Server właściwość tożsamości i DBPROP_COL_NULLABLE dwStatus do DBPROPSTATUS_CONFLICTING jest zestaw element członkowski. SQL Server Macierzystego klienta dostawca OLE DB zwraca błąd z SQL Server gdy konsument próbuje utworzyć ograniczenie UNIQUE dla kolumna nieprawidłowy SQL Server typu danych.UNIQUE constraints cannot be defined on columns created with the SQL Server bit data type. |
Gdy konsument wywołuje ITableDefinition::CreateTable, SQL Server macierzystego klienta dostawca OLE DB interpretuje właściwości tabela, jak następuje.
Identyfikator właściwości |
Opis |
|---|---|
DBPROP_TBL_TEMPTABLE |
R I W: Odczyt i zapis Wartość domyślna: VARIANT_FALSE opis: Domyślnie SQL Server macierzystego klienta dostawca OLE DB tworzy tabele o nazwie przez konsumenta.Po VARIANT_TRUE, SQL Server generuje macierzystym klienta dostawca OLE DB tabela tymczasowa nazwa dla konsumenta.Zestawy konsumenta pTableID parametr CreateTable wartości null.PpTableID parametr musi zawierać prawidłowy wskaźnik. |
Jeśli konsument żąda otwarcia zestawu zestaw wierszy w tabela utworzono, SQL Server macierzystego klienta dostawca OLE DB otwiera zestaw wierszy obsługiwanych przez kursor.W zestawy właściwość przekazany należy wskazać wszelkie właściwość zestawu zestaw wierszy.
To przykładowe polecenie tworzy 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);
}