SQL Server tabloları oluşturma

SQL ServerYerel istemci ole db sağlayıcısı sunar ITableDefinition::CreateTable fonksiyonu, tüketiciler oluşturmak için izin SQL Servertabloları. Tüketiciler kullanın CreateTable tarafından oluşturulan benzersiz adlara sahip tüketici adlı sürekli ve kalıcı ya da geçici tabloları oluşturmak için SQL Serveryerel istemci ole db sağlayıcısını.

Tüketici çağırdığında ITableDefinition::CreateTable, dbprop_tbl_temptable özelliğinin değerini varıant_true, ise SQL Serveryerel istemci ole db sağlayıcısı tüketici için geçici tablo adı oluşturur. Tüketici Setleri PTableID parametresi CreateTable yöntemi null. Tarafından oluşturulan geçici tablolar SQL Serveryerel istemci ole db sağlayıcısı değil gözükmek içinde tablo satır kümesi, ancak üzerinden erişilebilir IOpenRowset arabirimi.

Zaman tüketiciler tablo adı belirtin pwszName üyesi uName Birliği içinde PTableID parametresi SQL Serveryerel istemci ole db sağlayıcısı oluşturur bir SQL ServerBu tablo. SQL ServerTablo adlandırma kısıtlamaları uygulamak ve kalıcı bir tablo ya da herhangi bir yerel veya genel geçici tablo tablo adını belirtebilirsiniz. Daha fazla bilgi için bkz: create table. PpTableID parametresi null olabilir.

SQL ServerYerel istemci ole db sağlayıcı kalıcı veya geçici tablo adları üretmek. Zaman tüketici ayarlar PTableID parametresi null ve Set ppTableID bir geçerli DBID * için gelin SQL Serveryerel istemci ole db sağlayıcısı tablosunda oluşturulan ismini döndürür pwszName üyesi uName DBID Birliği işaret için değeri tarafından ppTableID. Geçici, oluşturmak için SQL Serveryerel istemci ole db sağlayıcısı adlı tablo, tüketici içerir ole db tablo özelliği dbprop_tbl_temptable olarak başvurulan bir tablo özelliği Rgpropertysetsdbpropset_sqlservercolumn parametresi. SQL ServerYerel istemci ole db sağlayıcı adı: geçici tablolara yereldir.

CreateTable DB_E_BADTABLEID döner eKind üyesi PTableID parametresi DBKIND_NAME belirtmek değil.

dbcolumndesc kullanımı

Tüketici bir sütunun veri türünü kullanarak gösterebilirsiniz pwszTypeName üye ya da wType üye. Tüketici veri türü belirtiyorsa pwszTypeName, SQL Serveryerel istemci ole db sağlayıcısı yok sayar wType.

Eğer istimal pwszTypeName üyesi, tüketici belirtir veri türünü kullanarak SQL Serververi türü adları. Geçerli veri türü adları PROVIDER_TYPES şema satır kümesi type_name sütununa döndürülen olanlardır.

SQL ServerYerel istemci ole db sağlayıcısı ole db numaralandırılan dbtype değerleri kümesini tanır wType üye. Daha fazla bilgi için, bkz. Oluşturma ITableDefinition içindeki veri türü eşleştirme.

[!NOT]

CreateTable db_e_badtype tüketici ayarlar ya da döndürür pTypeInfo ya pclsid sütun veri türü belirtmek için üye.

Tüketici sütun adını belirtir pwszName üyesi uName dbcolumndesc Birliği dbcid üye. Sütun adı Unicode karakter dizesi olarak belirtilir. EKind üyesi dbcid DBKIND_NAME olmalıdır. CreateTable DB_E_BADCOLUMNID döner eKind geçersiz pwszName NULL, ya da eğer değeri pwszName geçerli değil SQL Servertanımlayıcısı.

Tüm sütun özellikleri tablo için tanımlanmış tüm sütunlar bulunur. CreateTable çatışma özellik değerlerini ayarlarsanız db_s_errorsoccurred veya db_e_errorsoccurred dönebilirsiniz. CreateTable geçersiz sütun özellik ayarlarını neden bir hata döndürür SQL Servertablo oluşturma hatası.

Sütun Özellikleri'nde bir dbcolumndesc gibi yorumlanır.

Özellik kimliği

Açıklama

DBPROP_COL_AUTOINCREMENT

R/w: okuma/yazma

Varsayılan: VARIANT_FALSE Açıklama: oluşturulan sütun KIMLIK özelliği ayarlar. İçin SQL Server, kimlik özelliği bir tablo içinde tek bir sütun için geçerlidir. Varıant_true için tek bir sütunu hata üretir daha fazla özelliğini ayarlamak zaman SQL Serveryerel istemci ole db Sağlayıcı sunucuda tablo oluşturma girişimlerini.

SQL ServerKimlik özelliği yalnızca geçerli Tamsayı, sayısal, ve ondalık türleri ölçeği 0 olduğunda. Özelliği varıant_true için başka bir veri türünde bir sütun ayarı üretir hata olduğunda SQL Serveryerel istemci ole db Sağlayıcı sunucuda tablo oluşturma girişimlerini.

SQL ServerYerel istemci ole db sağlayıcısı döndürür db_s_errorsoccurred DBPROP_COL_AUTOINCREMENT ve dbprop_col_nullable iki varıant_true olduğunda ve dwOption dbprop_col_nullable DBPROPOPTIONS_REQUIRED değil. DBPROP_COL_AUTOINCREMENT ve dbprop_col_nullable iki varıant_true olduğunda db_e_errorsoccurred döndürülür ve dwOption DBPROPOPTIONS_REQUIRED dbprop_col_nullable eşittir. Sütun ile tanımlanır SQL Serverkimlik özelliği ve dbprop_col_nullable dwStatus üye DBPROPSTATUS_CONFLICTING için ayarlanır.

DBPROP_COL_DEFAULT

R/w: okuma/yazma

Varsayılan: hiçbiri

Açıklama: Oluşturur bir SQL Serversütun için varsayılan kısıtlama.

VValue dbprop üye herhangi bir sayıda türü olabilir. VValue.vt üye türü sütun veri türü ile uyumlu belirtmek. Örneğin, tanımlama bstr yok dbtype_wstr tanımlanmış bir sütun için varsayılan değer olarak uyumlu bir eştir. Aynı varsayılan DBTYPE_R8 bir hata üretir olarak tanımlanan bir sütun tanımlamak ne zaman SQL Serveryerel istemci ole db Sağlayıcı sunucuda tablo oluşturma girişimlerini.

DBPROP_COL_DESCRIPTION

R/w: okuma/yazma

Varsayılan: hiçbiri

Açıklama: DBPROP_COL_DESCRIPTION özelliği tarafından uygulanmamış SQL Serveryerel istemci ole db sağlayıcısını.

DwStatus dbprop yapısı üye döndürür dwStatus tüketici özellik değerini yazma girişiminde bulunduğunda.

Özellik ayarı değil teşkil için ölümcül bir hata SQL Serveryerel istemci ole db sağlayıcısını. Tüm diğer parametre değerleri geçerliyse, SQL Servertablosu oluşturuldu.

DBPROP_COL_FIXEDLENGTH

R/w: okuma/yazma

Varsayılan: VARIANT_FALSE

Açıklama: SQL Serverkullanarak tüketici bir sütunun veri türünü tanımlayan veri türü eşleme belirlemek için yerel istemci ole db sağlayıcı kullanır DBPROP_COL_FIXEDLENGTH wType dbcolumndesc üyesi. Daha fazla bilgi için, bkz. Oluşturma ITableDefinition içindeki veri türü eşleştirme.

DBPROP_COL_NULLABLE

R/w: okuma/yazma

Varsayılan: hiçbiri

Açıklama: tablo oluştururken SQL Serveryerel istemci ole db sağlayıcı gösterir özelliği ayarlanmışsa, sütun null değerleri kabul. Ne zaman özelliği ayarlı değil, sütun null değeri belirlenir kabul yeteneği SQL Serveransı_nulls varsayılan veritabanı seçeneği.

SQL ServerYerel istemci ole db sağlayıcısı olan bir ISO-compliant sağlayıcısı. Bağlı oturumlar ISO davranışlar sergiler. Tüketici dbprop_col_nullable ayarlamazsa, sütunların boş değerleri kabul.

DBPROP_COL_PRIMARYKEY

R/w: okuma/yazma

Varsayılan: VARIANT_FALSE Açıklama: varıant_true olduğunda, SQL Serveryerel istemci ole db sağlayıcısı oluşturur sütun PRIMARY key kısıtlaması ile.

Bir sütunun özelliği olarak tanımladığınızda, yalnızca tek bir sütun kısıtlaması belirleyebilirsiniz. Fazla tek bir sütun, bir hata döndürür özelliği varıant_true ayarlama zaman SQL Serveryerel istemci ole db sağlayıcısı çalışır oluşturmak SQL Servertablosu.

Not: Tüketici kullanabilirsiniz IIndexDefinition::CreateIndex üzerinde iki veya daha fazla sütun PRIMARY key kısıtlaması oluşturmak için.

SQL ServerYerel istemci ole db sağlayıcısı döndürür db_s_errorsoccurred iki varıant_true DBPROP_COL_PRIMARYKEY ve DBPROP_COL_UNIQUE olduğunuzda ve dwOption DBPROP_COL_UNIQUE DBPROPOPTIONS_REQUIRED değil.

Her iki varıant_true DBPROP_COL_PRIMARYKEY ve DBPROP_COL_UNIQUE olduğunuzda, db_e_errorsoccurred döndürülür ve dwOption DBPROP_COL_UNIQUE DBPROPOPTIONS_REQUIRED eşittir. Sütun ile tanımlanır SQL Serverkimlik özelliği ve DBPROP_COL_PRIMARYKEY dwStatus üye DBPROPSTATUS_CONFLICTING için ayarlanır.

SQL ServerYerel istemci ole db sağlayıcının döndürdüğü hata iki varıant_true olduğunda DBPROP_COL_PRIMARYKEY ve dbprop_col_nullable.

SQL ServerYerel istemci ole db sağlayıcısı hata gelen verir SQL Servertüketici geçersiz sütun PRIMARY key kısıtlaması oluşturmak denediği zaman SQL Serververi türü. PRIMARY key kısıtlamaları ile oluşturulan sütun üzerinde tanımlanabilir olamaz SQL Serververi türü bit, metin, ntext, ve Resim.

DBPROP_COL_UNIQUE

R/w: okuma/yazma

Varsayılan: VARIANT_FALSE Açıklama: uygulanan bir SQL ServerUNIQUE sınırlamasıyla sütuna.

Bir sütunun özelliği olarak tanımlanan zaman kısıtlaması yalnızca tek bir sütun üzerinde uygulanır. Tüketici-ebilmek kullanma IIndexDefinition::CreateIndex birleştirilmiş değerleri iki veya daha fazla sütun benzersiz bir kısıtlama uygulamak.

SQL ServerYerel istemci ole db sağlayıcısı döndürür db_s_errorsoccurred iki varıant_true DBPROP_COL_PRIMARYKEY ve DBPROP_COL_UNIQUE olduğunuzda ve dwOption DBPROPOPTIONS_REQUIRED değil.

Her iki varıant_true DBPROP_COL_PRIMARYKEY ve DBPROP_COL_UNIQUE olduğunuzda, db_e_errorsoccurred döndürülür ve dwOption DBPROPOPTIONS_REQUIRED eşittir. Sütun ile tanımlanır SQL Serverkimlik özelliği ve DBPROP_COL_PRIMARYKEY dwStatus üye DBPROPSTATUS_CONFLICTING için ayarlanır.

SQL ServerYerel istemci ole db sağlayıcısı döndürür db_s_errorsoccurred iki varıant_true dbprop_col_nullable ve DBPROP_COL_UNIQUE olduğunuzda ve dwOption DBPROPOPTIONS_REQUIRED değil.

Her iki varıant_true dbprop_col_nullable ve DBPROP_COL_UNIQUE olduğunuzda, db_e_errorsoccurred döndürülür ve dwOption DBPROPOPTIONS_REQUIRED eşittir. Sütun ile tanımlanır SQL Serverkimlik özelliği ve dbprop_col_nullable dwStatus üye DBPROPSTATUS_CONFLICTING için ayarlanır.

SQL ServerYerel istemci ole db sağlayıcısı hata gelen verir SQL Servertüketici geçersiz sütun benzersiz kısıtlama oluşturmak denediği zaman SQL Serververi türü. UNIQUE kısıtlamaları ile oluşturulan sütun üzerinde tanımlanabilir olamaz SQL Server   bit veri türü.

Tüketici çağırdığında ITableDefinition::CreateTable, SQL Serveryerel istemci ole db sağlayıcısı aşağıdaki gibi tablo özelliklerini yorumlayan.

Özellik kimliği

Açıklama

DBPROP_TBL_TEMPTABLE

R/w: okuma/yazma

Varsayılan: VARIANT_FALSE Açıklama: varsayılan olarak, SQL Serveryerel istemci ole db sağlayıcısı tüketici tarafından adlandırılan tablolar yaratır. Ne zaman varıant_true, SQL Serveryerel istemci ole db sağlayıcısı tüketici için geçici tablo adı oluşturur. Tüketici Setleri PTableID parametresi CreateTable NULL. PpTableID parametresi geçerli işaretçi içermesi gerekir.

Bir satır kümesi başarıyla oluşturulan bir masada açılacak tüketici isterse SQL Serveryerel istemci ole db sağlayıcısı imleç tarafından desteklenen bir satır kümesi açılır. Satır kümesi özellikleri geçilen özellik kümeleri içinde belirtilebilir.

Bu örnek bir SQL Servertablosu.

// 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);
    }

// 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);
    }

Ayrıca bkz.

Kavramlar

Tablolar ve dizinler