Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Der OLE DB-Anbieter von SQL Server Native Client macht die Funktion "ITableDefinition::CreateTable " verfügbar, sodass Verbraucher SQL Server-Tabellen erstellen können. Consumer verwenden CreateTable zum Erstellen von permanenten Tabellen mit Consumernamen sowie permanente oder temporäre Tabellen mit eindeutigen Namen, die vom SQL Server Native Client OLE DB-Anbieter generiert werden.
Wenn der Consumer ITableDefinition::CreateTable aufruft, generiert der SQL Server Native Client OLE DB-Anbieter einen temporären Tabellennamen für den Consumer, wenn der Wert der DBPROP_TBL_TEMPTABLE-Eigenschaft VARIANT_TRUE ist. Der Consumer legt den pTableID-Parameter der CreateTable-Methode auf NULL fest. Die temporären Tabellen mit Namen, die vom OLE DB-Anbieter für SQL Server Native Client generiert werden, werden nicht im TABLES-Rowset angezeigt, sind aber über die IOpenRowset-Schnittstelle zugänglich.
Wenn Consumer den Tabellennamen im pwszName-Member der uName-Union im pTableID-Parameter angeben, erstellt der OLE DB-Anbieter von SQL Server Native Client eine SQL Server-Tabelle mit diesem Namen. Sql Server-Tabellenbenennungseinschränkungen gelten, und der Tabellenname kann eine permanente Tabelle oder eine lokale oder globale temporäre Tabelle angeben. Weitere Informationen finden Sie unter CREATE TABLE. Der ppTableID-Parameter kann NULL sein.
Der OLE DB-Anbieter von SQL Server Native Client kann die Namen dauerhafter oder temporärer Tabellen generieren. Wenn der Consumer den pTableID-Parameter auf NULL festlegt und ppTableID so festlegt, dass er auf ein gültiges DBID* zeigt, gibt der OLE DB-Anbieter von SQL Server Native Client den generierten Namen der Tabelle im pwszName-Member der uName-Union des DBID zurück, auf den der Wert von ppTableID verweist. Um eine temporäre, sql Server Native Client OLE DB-vom Anbieter benannte Tabelle zu erstellen, enthält der Consumer die OLE DB-Tabelleneigenschaft DBPROP_TBL_TEMPTABLE in einer Tabelleneigenschaft, auf die im rgPropertySets-Parameter verwiesen wird. SQL Server Native Client OLE DB vom Anbieter benannte temporäre Tabellen sind lokal.
CreateTable gibt DB_E_BADTABLEID zurück, wenn das eKind-Element des pTableID-Parameters nicht auf DBKIND_NAME hinweist.
DBCOLUMNDESC-Verwendung
Der Consumer kann einen Spaltendatentyp angeben, indem er entweder das pwszTypeName-Element oder das wType-Element verwendet. Wenn der Consumer den Datentyp in pwszTypeName angibt, ignoriert der OLE DB-Anbieter von SQL Server Native Client den Wert von wType.
Wenn Sie das pwszTypeName-Element verwenden, gibt der Consumer den Datentyp mithilfe von SQL Server-Datentypnamen an. Gültige Datentypnamen werden in der TYPE_NAME Spalte des PROVIDER_TYPES Schema-Rowsets zurückgegeben.
Der OLE DB-Anbieter von SQL Server Native Client erkennt eine Teilmenge der aufgezählten OLE DBTYPE-Werte im wType-Element . Weitere Informationen finden Sie unter "Datentypzuordnung" in ITableDefinition.
Hinweis
CreateTable gibt DB_E_BADTYPE zurück, wenn Consumer entweder das pTypeInfo - oder pclsid-Element zum Angeben des Spaltendatentyps festlegt.
Der Consumer gibt den Spaltennamen im pwszName-Mitglied der uName-Union des DBCOLUMNDESC dbcid-Mitglieds an. Der Spaltenname wird als Unicode-Zeichenfolge angegeben. Das eKind-Mitglied von dbcid muss DBKIND_NAME werden. CreateTable gibt DB_E_BADCOLUMNID zurück, wenn eKind ungültig ist, pwszName NULL ist oder der Wert von pwszName kein gültiger SQL Server-Bezeichner ist.
Alle Spalteneigenschaften sind für alle Spalten verfügbar, die für die Tabelle definiert sind. CreateTable kann DB_S_ERRORSOCCURRED oder DB_E_ERRORSOCCURRED zurückgeben, wenn Eigenschaftswerte in Konflikt stehen. CreateTable gibt einen Fehler zurück, wenn ungültige Spalteneigenschafteneinstellungen sql Server-Tabellenerstellungsfehler verursachen.
Spalteneigenschaften in einem DBCOLUMNDESC werden wie folgt interpretiert.
| Eigenschaften-ID | BESCHREIBUNG |
|---|---|
| DBPROP_COL_AUTOINCREMENT | R/W: Lese-/Schreibzugriff Standard: VARIANT_FALSE Beschreibung: Legt die Identitätseigenschaft für die erstellte Spalte fest. Für SQL Server ist die Identitätseigenschaft für eine einzelne Spalte in einer Tabelle gültig. Wenn die Eigenschaft für mehr als eine einzelne Spalte auf VARIANT_TRUE festgelegt wird, wird ein Fehler generiert, wenn der OLE DB-Anbieter von SQL Server Native Client versucht, die Tabelle auf dem Server zu erstellen. Die SQL Server-Identitätseigenschaft ist nur für die ganzzahligen, numerischen und dezimalen Typen gültig, wenn die Skalierung 0 ist. Wenn Die Eigenschaft auf VARIANT_TRUE in einer Spalte eines anderen Datentyps festgelegt wird, wird ein Fehler generiert, wenn der OLE DB-Anbieter von SQL Server Native Client versucht, die Tabelle auf dem Server zu erstellen. Der OLE DB-Anbieter von SQL Server Native Client gibt DB_S_ERRORSOCCURRED zurück, wenn DBPROP_COL_AUTOINCREMENT und DBPROP_COL_NULLABLE sowohl VARIANT_TRUE sind als auch die dwOption von DBPROP_COL_NULLABLE nicht DBPROPOPTIONS_REQUIRED ist. DB_E_ERRORSOCCURRED wird zurückgegeben, wenn DBPROP_COL_AUTOINCREMENT und DBPROP_COL_NULLABLE sowohl VARIANT_TRUE als auch die dwOption von DBPROP_COL_NULLABLE gleich DBPROPOPTIONS_REQUIRED sind. Die Spalte wird mit der SQL Server-Identitätseigenschaft definiert, und der DBPROP_COL_NULLABLE dwStatus-Member wird auf DBPROPSTATUS_CONFLICTING festgelegt. |
| DBPROP_COL_DEFAULT | R/W: Lese-/Schreibzugriff Standard: Keine Beschreibung: Erstellt eine SQL Server DEFAULT-Einschränkung für die Spalte. Das vValue DBPROP-Mitglied kann eine beliebige Anzahl von Typen sein. Der vValue.vt-Member sollte einen Typ angeben, der mit dem Datentyp der Spalte kompatibel ist. Beispielsweise ist das Definieren von BSTR N/A als Standardwert für eine Spalte, die als DBTYPE_WSTR definiert ist, eine kompatible Übereinstimmung. Beim Definieren desselben Standardwerts für eine Spalte, die als DBTYPE_R8 definiert ist, wird ein Fehler generiert, wenn der OLE DB-Anbieter von SQL Server Native Client versucht, die Tabelle auf dem Server zu erstellen. |
| DBPROP_COL_DESCRIPTION | R/W: Lese-/Schreibzugriff Standard: Keine Beschreibung: Die DBPROP_COL_DESCRIPTION Spalteneigenschaft wird nicht vom SQL Server Native Client OLE DB-Anbieter implementiert. Das dwStatus-Element der DBPROP-Struktur gibt DBPROPSTATUS_NOTSUPPORTED zurück, wenn der Consumer versucht, den Eigenschaftswert zu schreiben. Das Festlegen der Eigenschaft stellt keinen schwerwiegenden Fehler für den OLE DB-Anbieter des SQL Server Native Client dar. Wenn alle anderen Parameterwerte gültig sind, wird die SQL Server-Tabelle erstellt. |
| DBPROP_COL_FIXEDLENGTH | R/W: Lese-/Schreibzugriff Standard: VARIANT_FALSE Beschreibung: Der OLE DB-Anbieter von SQL Server Native Client verwendet DBPROP_COL_FIXEDLENGTH, um die Datentypzuordnung zu bestimmen, wenn der Consumer den Datentyp einer Spalte mithilfe des wType-Members des DBCOLUMNDESC definiert. Weitere Informationen finden Sie unter "Datentypzuordnung" in ITableDefinition. |
| DBPROP_COL_NULLABLE | R/W: Lese-/Schreibzugriff Standard: Keine Beschreibung: Beim Erstellen der Tabelle gibt der OLE DB-Anbieter von SQL Server Native Client an, ob die Spalte NULL-Werte akzeptieren soll, wenn die Eigenschaft festgelegt ist. Wenn die Eigenschaft nicht festgelegt ist, wird die Möglichkeit der Spalte, NULL als Wert zu akzeptieren, von der SQL Server-Standarddatenbankoption ANSI_NULLS bestimmt. Der OLE DB-Anbieter von SQL Server Native Client ist ein ISO-kompatibler Anbieter. Verbundene Sitzungen zeigen ISO-Verhalten. Wenn der Consumer DBPROP_COL_NULLABLE nicht festgelegt hat, akzeptieren Spalten NULL-Werte. |
| DBPROP_COL_PRIMARYKEY | R/W: Lese-/Schreibzugriff Standard: VARIANT_FALSE Beschreibung: Wenn VARIANT_TRUE, erstellt der OLE DB-Anbieter von SQL Server Native Client die Spalte mit einer PRIMARY KEY-Einschränkung. Wenn sie als Spalteneigenschaft definiert ist, kann nur eine einzelne Spalte die Einschränkung bestimmen. Das Festlegen der Eigenschaft VARIANT_TRUE für mehr als eine einzelne Spalte gibt einen Fehler zurück, wenn der OLE DB-Anbieter von SQL Server Native Client versucht, die SQL Server-Tabelle zu erstellen. Hinweis: Der Consumer kann IIndexDefinition::CreateIndex verwenden, um eine PRIMARY KEY-Einschränkung für zwei oder mehr Spalten zu erstellen. Der OLE DB-Anbieter von SQL Server Native Client gibt DB_S_ERRORSOCCURRED zurück, wenn DBPROP_COL_PRIMARYKEY und DBPROP_COL_UNIQUE sowohl VARIANT_TRUE sind als auch die dwOption von DBPROP_COL_UNIQUE nicht DBPROPOPTIONS_REQUIRED ist. DB_E_ERRORSOCCURRED wird zurückgegeben, wenn DBPROP_COL_PRIMARYKEY und DBPROP_COL_UNIQUE sowohl VARIANT_TRUE als auch die dwOption von DBPROP_COL_UNIQUE gleich DBPROPOPTIONS_REQUIRED sind. Die Spalte wird mit der SQL Server-Identitätseigenschaft definiert, und der DBPROP_COL_PRIMARYKEY dwStatus-Member wird auf DBPROPSTATUS_CONFLICTING festgelegt. Der OLE DB-Anbieter von SQL Server Native Client gibt einen Fehler zurück, wenn DBPROP_COL_PRIMARYKEY und DBPROP_COL_NULLABLE beide VARIANT_TRUE sind. Der OLE DB-Anbieter von SQL Server Native Client gibt einen Fehler von SQL Server zurück, wenn der Consumer versucht, eine PRIMARY KEY-Einschränkung für eine Spalte mit ungültigem SQL Server-Datentyp zu erstellen. PRIMARY KEY-Einschränkungen können nicht für Spalten definiert werden, die mit den SQL Server-Datentypen Bit, Text, ntext und Bild erstellt wurden. |
| DBPROP_COL_UNIQUE | R/W: Lese-/Schreibzugriff Standard: VARIANT_FALSE Beschreibung: Wendet eine SQL Server UNIQUE-Einschränkung auf die Spalte an. Wenn sie als Spalteneigenschaft definiert ist, wird die Einschränkung nur auf eine einzelne Spalte angewendet. Der Consumer kann IIndexDefinition::CreateIndex verwenden, um eine UNIQUE-Einschränkung auf die kombinierten Werte von zwei oder mehr Spalten anzuwenden. Der OLE DB-Anbieter von SQL Server Native Client gibt DB_S_ERRORSOCCURRED zurück, wenn DBPROP_COL_PRIMARYKEY und DBPROP_COL_UNIQUE sowohl VARIANT_TRUE als auch dwOption nicht DBPROPOPTIONS_REQUIRED sind. DB_E_ERRORSOCCURRED wird zurückgegeben, wenn DBPROP_COL_PRIMARYKEY und DBPROP_COL_UNIQUE sowohl VARIANT_TRUE als auch dwOption gleich DBPROPOPTIONS_REQUIRED sind. Die Spalte wird mit der SQL Server-Identitätseigenschaft definiert, und der DBPROP_COL_PRIMARYKEY dwStatus-Member wird auf DBPROPSTATUS_CONFLICTING festgelegt. Der OLE DB-Anbieter von SQL Server Native Client gibt DB_S_ERRORSOCCURRED zurück, wenn DBPROP_COL_NULLABLE und DBPROP_COL_UNIQUE sowohl VARIANT_TRUE als auch dwOption nicht DBPROPOPTIONS_REQUIRED sind. DB_E_ERRORSOCCURRED wird zurückgegeben, wenn DBPROP_COL_NULLABLE und DBPROP_COL_UNIQUE sowohl VARIANT_TRUE als auch dwOption gleich DBPROPOPTIONS_REQUIRED sind. Die Spalte wird mit der SQL Server-Identitätseigenschaft definiert, und der DBPROP_COL_NULLABLE dwStatus-Member wird auf DBPROPSTATUS_CONFLICTING festgelegt. Der OLE DB-Anbieter von SQL Server Native Client gibt einen Fehler von SQL Server zurück, wenn der Consumer versucht, eine UNIQUE-Einschränkung für eine Spalte mit ungültigem SQL Server-Datentyp zu erstellen. EINDEUTIGE Einschränkungen können nicht für Spalten definiert werden, die mit dem SQL Server-Bit-Datentyp erstellt wurden. |
Wenn der Consumer ITableDefinition::CreateTable aufruft, interpretiert der OLE DB-Anbieter von SQL Server Native Client Tabelleneigenschaften wie folgt.
| Eigenschaften-ID | BESCHREIBUNG |
|---|---|
| DBPROP_TBL_TEMPTABLE | R/W: Lese-/Schreibzugriff Standard: VARIANT_FALSE Beschreibung: Standardmäßig erstellt der OLE DB-Anbieter von SQL Server Native Client Tabellen, die vom Consumer benannt werden. Wenn VARIANT_TRUE, generiert der OLE DB-Anbieter des SQL Server Native Client einen temporären Tabellennamen für den Consumer. Der Consumer legt den pTableID-Parameter von CreateTable auf NULL fest. Der ppTableID-Parameter muss einen gültigen Zeiger enthalten. |
Wenn der Consumer anfordert, dass ein Rowset in einer erfolgreich erstellten Tabelle geöffnet wird, öffnet der OLE DB-Anbieter von SQL Server Native Client ein cursorgestütztes Rowset. Alle Rowset-Eigenschaften können in den übergebenen Eigenschaftensätzen angegeben werden.
In diesem Beispiel wird eine SQL Server-Tabelle erstellt.
// 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);
}