Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Поставщик OLE DB собственного клиента SQL Server предоставляет функцию ITableDefinition::CreateTable , позволяя потребителям создавать таблицы SQL Server. Потребители используют CreateTable для создания именованных потребителем постоянных таблиц и постоянных или временных таблиц с уникальными именами, созданными поставщиком OLE DB собственного клиента SQL Server.
Когда потребитель вызывает ITableDefinition::CreateTable, если значение свойства DBPROP_TBL_TEMPTABLE VARIANT_TRUE, поставщик OLE DB sql Server Native Client создает временное имя таблицы для потребителя. Потребитель задает параметр pTableID метода CreateTable значение NULL. Временные таблицы с именами, созданными поставщиком OLE DB собственного клиента SQL Server, не отображаются в наборе строк TABLE , но доступны через интерфейс IOpenRowset .
Когда потребители указывают имя таблицы в члене объединения uName в параметре pTableID, поставщик OLE DB sql Server Native Client создает таблицу SQL Server с таким именем. Ограничения именования таблиц SQL Server применяются, а имя таблицы может указывать постоянную таблицу или локальную или глобальную временную таблицу. Дополнительные сведения см. в разделе CREATE TABLE. Параметр ppTableID может иметь значение NULL.
Поставщик OLE DB собственного клиента SQL Server может создавать имена постоянных или временных таблиц. Когда потребитель задает параметр pTableID значение NULL и задает ppTableID для указания допустимого DBID*, поставщик OLE DB sql Server Native Client ВОЗВРАЩАЕТ созданное имя таблицы в члене uName объединения UName db, на которое указывает значение ppTableID. Чтобы создать временную таблицу OLE DB для собственного клиента SQL Server, потребитель включает свойство таблицы OLE DB DBPROP_TBL_TEMPTABLE в наборе свойств таблицы, на которые ссылается параметр rgPropertySets . Временные таблицы с именем поставщика OLE DB для собственного клиента SQL Server являются локальными.
CreateTable возвращает DB_E_BADTABLEID, если элемент eKind параметра pTableID не указывает DBKIND_NAME.
Использование DBCOLUMNDESC
Потребитель может указывать тип данных столбца с помощью элемента pwszTypeName или члена wType . Если потребитель указывает тип данных в pwszTypeName, поставщик OLE DB sql Server Native Client игнорирует значение wType.
При использовании члена pwszTypeName потребитель задает тип данных с помощью имен типов данных SQL Server. Допустимые имена типов данных — это имена, возвращаемые в столбце TYPE_NAME набора строк схемы PROVIDER_TYPES.
Поставщик OLE DB собственного клиента SQL Server распознает подмножество перечисленных значений DBTYPE OLE DB в члене wType . Дополнительные сведения см. в разделе "Сопоставление типов данных" в ITableDefinition.
Замечание
CreateTable возвращает DB_E_BADTYPE, если потребитель задает элемент pTypeInfo или pclsid , чтобы указать тип данных столбца.
Потребитель указывает имя столбца в элементе pwszName объединения uName члена dbCOLUMNDESC dbcid . Имя столбца указывается как символьная строка Юникода. Элемент eKinddbcid должен быть DBKIND_NAME. CreateTable возвращает DB_E_BADCOLUMNID если eKind недопустим, pwszName имеет значение NULL или если значение pwszName не является допустимым идентификатором SQL Server.
Все свойства столбцов доступны для всех столбцов, определенных для таблицы. CreateTable может возвращать DB_S_ERRORSOCCURRED или DB_E_ERRORSOCCURRED, если значения свойств заданы в конфликте. CreateTable возвращает ошибку, если недопустимые параметры свойства столбца вызывают сбой создания таблиц SQL Server.
Свойства столбцов в DBCOLUMNDESC интерпретируются следующим образом.
| Идентификатор объекта недвижимости | Описание |
|---|---|
| DBPROP_COL_AUTOINCREMENT | R/W: чтение и запись Значение по умолчанию: VARIANT_FALSE Описание: задает свойство удостоверения в созданном столбце. Для SQL Server свойство удостоверения допустимо для одного столбца в таблице. Задание свойства VARIANT_TRUE для нескольких столбцов создает ошибку, когда поставщик OLE DB SQL Server Native Client пытается создать таблицу на сервере. Свойство удостоверения SQL Server допустимо только для целочисленных, числовых и десятичных типов, если масштаб равен 0. Если свойство VARIANT_TRUE в столбце любого другого типа данных, возникает ошибка, когда поставщик OLE DB sql Server Native Client пытается создать таблицу на сервере. Поставщик OLE DB собственного клиента SQL Server возвращает DB_S_ERRORSOCCURRED, если DBPROP_COL_AUTOINCREMENT и DBPROP_COL_NULLABLE VARIANT_TRUE, а dwOption DBPROP_COL_NULLABLE не DBPROPOPTIONS_REQUIRED. DB_E_ERRORSOCCURRED возвращается, когда DBPROP_COL_AUTOINCREMENT и DBPROP_COL_NULLABLE VARIANT_TRUE и dwOption DBPROP_COL_NULLABLE равно DBPROPOPTIONS_REQUIRED. Столбец определен со свойством удостоверения SQL Server, а для элемента dwStatus DBPROP_COL_NULLABLE задано значение DBPROPSTATUS_CONFLICTING. |
| DBPROP_COL_DEFAULT | R/W: чтение и запись Значение по умолчанию: Нет Описание. Создает ограничение ПО УМОЛЧАНИю SQL Server для столбца. Член DBPROP vValue может быть любым из нескольких типов. Член vValue.vt должен указать тип, совместимый с типом данных столбца. Например, определение BSTR N/A в качестве значения по умолчанию для столбца, определенного как DBTYPE_WSTR, является совместимым совпадением. Определение того же значения по умолчанию для столбца, определенного как DBTYPE_R8, приводит к ошибке, когда поставщик OLE DB sql Server Native Client пытается создать таблицу на сервере. |
| DBPROP_COL_DESCRIPTION | R/W: чтение и запись Значение по умолчанию: Нет Описание. Свойство столбца DBPROP_COL_DESCRIPTION не реализуется поставщиком OLE DB собственного клиента SQL Server. Член dwStatus структуры DBPROP возвращает DBPROPSTATUS_NOTSUPPORTED, когда потребитель пытается записать значение свойства. Установка свойства не является неустранимой ошибкой для поставщика OLE DB собственного клиента SQL Server. Если все остальные значения параметров допустимы, создается таблица SQL Server. |
| DBPROP_COL_FIXEDLENGTH | R/W: чтение и запись По умолчанию: VARIANT_FALSE Описание. Поставщик OLE DB собственного клиента SQL Server использует DBPROP_COL_FIXEDLENGTH для определения сопоставления типов данных, когда потребитель определяет тип данных столбца с помощью элемента wType DBCOLUMNDESC. Дополнительные сведения см. в разделе "Сопоставление типов данных" в ITableDefinition. |
| DBPROP_COL_NULLABLE | R/W: чтение и запись Значение по умолчанию: Нет Описание. При создании таблицы поставщик OLE DB собственного клиента SQL Server указывает, должен ли столбец принимать значения NULL, если свойство задано. Если свойство не задано, возможность столбца принимать ЗНАЧЕНИЕ NULL в качестве значения определяется параметром базы данных SQL Server ANSI_NULLS по умолчанию. Поставщик OLE DB собственного клиента SQL Server является поставщиком, совместимым с ISO. Подключенные сеансы демонстрируют поведение ISO. Если потребитель не задает DBPROP_COL_NULLABLE, столбцы принимают значения NULL. |
| DBPROP_COL_PRIMARYKEY | R/W: чтение и запись Значение по умолчанию: VARIANT_FALSE описание. При VARIANT_TRUE поставщик OLE DB собственного клиента SQL Server создает столбец с ограничением PRIMARY KEY. При определении как свойства столбца только один столбец может определить ограничение. Задание свойства VARIANT_TRUE для нескольких столбцов возвращает ошибку, когда поставщик OLE DB sql Server native client пытается создать таблицу SQL Server. Примечание. Потребитель может использовать IIndexDefinition::CreateIndex для создания ограничения PRIMARY KEY для двух или нескольких столбцов. Поставщик OLE DB собственного клиента SQL Server возвращает DB_S_ERRORSOCCURRED, если DBPROP_COL_PRIMARYKEY и DBPROP_COL_UNIQUE VARIANT_TRUE, а dwOption DBPROP_COL_UNIQUE не DBPROPOPTIONS_REQUIRED. DB_E_ERRORSOCCURRED возвращается, когда DBPROP_COL_PRIMARYKEY и DBPROP_COL_UNIQUE VARIANT_TRUE и dwOption DBPROP_COL_UNIQUE равно DBPROPOPTIONS_REQUIRED. Столбец определяется свойством удостоверения SQL Server, а для элемента dwStatus DBPROP_COL_PRIMARYKEY задано значение DBPROPSTATUS_CONFLICTING. Поставщик OLE DB собственного клиента SQL Server возвращает ошибку, если DBPROP_COL_PRIMARYKEY и DBPROP_COL_NULLABLE оба VARIANT_TRUE. Поставщик OLE DB собственного клиента SQL Server возвращает ошибку из SQL Server, когда потребитель пытается создать ограничение PRIMARY KEY для столбца недопустимого типа данных SQL Server. Ограничения PRIMARY KEY нельзя определить для столбцов, созданных с помощью бита типов данных SQL Server, текста, ntext и изображения. |
| DBPROP_COL_UNIQUE | R/W: чтение и запись По умолчанию: VARIANT_FALSE описание: применяет ограничение SQL Server UNIQUE к столбцу. При определении свойства столбца ограничение применяется только к одному столбцу. Потребитель может использовать IIndexDefinition::CreateIndex для применения ограничения UNIQUE для объединенных значений двух или более столбцов. Поставщик OLE DB собственного клиента SQL Server возвращает DB_S_ERRORSOCCURRED, если DBPROP_COL_PRIMARYKEY и DBPROP_COL_UNIQUE VARIANT_TRUE и dwOption не DBPROPOPTIONS_REQUIRED. DB_E_ERRORSOCCURRED возвращается, когда DBPROP_COL_PRIMARYKEY и DBPROP_COL_UNIQUE VARIANT_TRUE и dwOption равны DBPROPOPTIONS_REQUIRED. Столбец определяется свойством удостоверения SQL Server, а для элемента dwStatus DBPROP_COL_PRIMARYKEY задано значение DBPROPSTATUS_CONFLICTING. Поставщик OLE DB собственного клиента SQL Server возвращает DB_S_ERRORSOCCURRED, если DBPROP_COL_NULLABLE и DBPROP_COL_UNIQUE VARIANT_TRUE и dwOption не DBPROPOPTIONS_REQUIRED. DB_E_ERRORSOCCURRED возвращается, когда DBPROP_COL_NULLABLE и DBPROP_COL_UNIQUE VARIANT_TRUE и dwOption равны DBPROPOPTIONS_REQUIRED. Столбец определен со свойством удостоверения SQL Server, а для элемента dwStatus DBPROP_COL_NULLABLE задано значение DBPROPSTATUS_CONFLICTING. Поставщик OLE DB собственного клиента SQL Server возвращает ошибку из SQL Server, когда потребитель пытается создать ограничение UNIQUE для столбца недопустимого типа данных SQL Server. Ограничения UNIQUE нельзя определить для столбцов, созданных с помощью типа битовых данных SQL Server. |
Когда потребитель вызывает ITableDefinition::CreateTable, поставщик OLE DB sql Server Native Client интерпретирует свойства таблицы следующим образом.
| Идентификатор объекта недвижимости | Описание |
|---|---|
| DBPROP_TBL_TEMPTABLE | R/W: чтение и запись По умолчанию: VARIANT_FALSE описание. По умолчанию поставщик OLE DB собственного клиента SQL Server создает таблицы с именем потребителя. При VARIANT_TRUE поставщик OLE DB собственного клиента SQL Server создает временное имя таблицы для потребителя. Потребитель задает параметр pTableID createTable значение NULL. Параметр ppTableID должен содержать допустимый указатель. |
Если потребитель запрашивает, что набор строк будет открыт в успешно созданной таблице, поставщик OLE DB sql Server Native Client открывает поддерживаемый курсором набор строк. Все свойства набора строк можно указать в переданных наборах свойств.
В этом примере создается таблица SQL Server.
// 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);
}