Share via


SQL Server tabloları oluşturma

The SQL Server Native Client OLE DB provider exposes the ITableDefinition::CreateTable function, allowing consumers to create SQL Server tables.Tüketiciler kullanmak CreateTable tarafından oluşturulan benzersiz adlara sahip tüketici adlı kalıcı ve kalıcı veya geçici tabloları oluşturmak için SQL Server yerel istemci ole db sağlayıcı.

Tüketici çağırdığında ITableDefinition::CreateTable, dbprop_tbl_temptable değerinin özellik üzerine yazılmasına, iş SQL Server yerel istemci ole db sağlayıcı oluşturur bir geçici tablo adı tüketici.Tüketici ayarlar pTableID parametresi CreateTable yöntem null.Geçici tablolar tarafından üretilen SQL Server yerel istemci ole db sağlayıcı yok görünüyor Tablo satır kümesi, ancak üzerinden erişilebilir IOpenRowset arabirim.

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.Daha fazla bilgi için bkz: create table.The ppTableID parameter can be NULL.

The SQL Server Native Client OLE DB provider can generate the names of permanent or temporary tables.Ne zaman tüketici ayarlar ptabloID parametresi null ve kümeleri için geliştirme SYtablokimliği bir geçerli DBID * için işaret etmek SQL Server yerel istemci ole db sağlayıcı oluşturulan adını döndürür tablo içinde pwszName üye uName DBID birleşimini işaret için değeri tarafından geliştirme SYtablokimliği.Bir geçici oluşturmak için SQL Server yerel istemci ole db sağlayıcı adlı tablo, tüketici dbprop_tbl_temptable ole db tablo özellik bir tablo özellik içeren küme içinde bulunulan rgPropertykümes parametresi.SQL ServerYerel istemci ole db sağlayıcı adlı geçici tablolar yereldir.

CreateTable DB_E_BADTABLEID, verir eKind üye pTableID parametresini belirtmek DBKIND_NAME.

dbcolumndesc kullanımı

Tüketici sütun veri türünü kullanarak gösterebilirsiniz pwszTypeName üye veya wType üye.Tüketici veri türünü belirtir, pwszTypeName, SQL Server yerel istemci ole db sağlayıcı değerini yok sayar wType.

Kullanarak, pwszTypeName üye, tüketici kullanarak veri türünü belirtir SQL Server veri türü adları.PROVIDER_TYPES type_name sütununa döndürülen geçerli veri türü adları şunlardır şema satır kümesi.

The SQL Server Native Client OLE DB provider recognizes a subset of OLE DB-enumerated DBTYPE values in the wType member.Daha fazla bilgi için bkz: ITableDefinition veri türü eşleme.

Not

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

Sütun adı içinde tüketici belirtir pwszName üyesi uName Birliği dbcolumndesc, dbcid üye.Unicode karakteri olarak belirtilen sütun adı dize.The eKind member of dbcid must be DBKIND_NAME.CreateTable DB_E_BADCOLUMNID verir eKind geçersiz pwszName , null veya değeri pwszName geçerli değil SQL Server tanımlayıcısı.

Tüm sütunları bir tablo için tanımlanmış tüm sütun özellikleri kullanılabilir.CreateTable özellik değerleri, db_s_errorsoccurred veya db_e_errorsoccurred dönebilirsiniz küme çakışan.CreateTable geçersiz sütun özellik ayarlarını neden bir hata döndürür SQL Server Tablo oluşturma hatası.

Sütun özellikleri görünümünde bir dbcolumndesc gibi yorumlanır.

Özellik kimliği

Açıklama

DBPROP_COL_AUTOINCREMENT

R/W: Okuma/yazma

Varsayılan: VARIANT_FALSE açıklaması: Kimlik özellik ayarlar sütun oluşturulmuş.İçin SQL Server, kimlik özellik, geçerli tek sütun içindeki bir tablo.Birden çok tek bir üzerine yazılmasına için özellik ayarlama sütun bir hata üretir, SQL Server yerel istemci ole db sağlayıcı çalışır oluşturmak tablo üzerinde sunucu.

The SQL Server identity property is only valid for the integer, numeric, and decimal types when the scale is 0.Bir başka bir veri türü sütun üzerinde üzerine yazılmasına için özellik ayarlama bir hata üretir, SQL Server yerel istemci ole db sağlayıcı çalışır oluşturmak tablo üzerinde sunucu.

The SQL Server Native Client OLE DB provider 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.DBPROP_COL_AUTOINCREMENT ve dbprop_col_nullable hem üzerine yazılmasına olduğunda db_e_errorsoccurred döndürülür ve dwOption DBPROPOPTIONS_REQUIRED dbprop_col_nullable eşittir.Sütun ile tanımlanmış SQL Server kimlik özellik ve dbprop_col_nullable dwStatus üye olduğu küme için DBPROPSTATUS_CONFLICTING.

DBPROP_COL_DEFAULT

R/W: Okuma/yazma

Varsayılan: Hiçbiri

Açıklama: Oluşturur bir SQL Server varsayılan kısıtlamayı sütun.

The vValue DBPROP member can be any of a number of types.The vValue.vt member should specify a type compatible with the data type of the column.Örneğin, tanımlama bstr yok dbtype_wstr uyumlu bir eşleşme olduğu gibi tanımlanmış bir sütun için varsayılan değer olarak.Üzerinde aynı varsayılan tanımlama bir sütun DBTYPE_R8 bir hata üretir olarak tanımlanan zaman SQL Server yerel istemci ole db sağlayıcı çalışır oluşturmak tablo üzerinde sunucu.

DBPROP_COL_DESCRIPTION

R/W: Okuma/yazma

Varsayılan: Hiçbiri

Açıklama: DBPROP_COL_DESCRIPTION sütun özellik tarafından uygulanan SQL Server yerel istemci ole db sağlayıcı.

The dwStatus member of the DBPROP structure returns DBPROPSTATUS_NOTSUPPORTED when the consumer attempts to write the property value.

Özellik ayarı değil oluşturan için önemli önemli hata SQL Server yerel istemci ole db sağlayıcı.Tüm diğer parametre değerleri geçerliyse, SQL Server Tablo oluşturulur.

DBPROP_COL_FIXEDLENGTH

R/W: Okuma/yazma

Varsayılan: VARIANT_FALSE

Açıklama: SQL Server Kullanarak tüketici sütun veri türünü tanımlayan veri türü eşleme belirlerken yerel istemci ole db sağlayıcı kullanır DBPROP_COL_FIXEDLENGTH wType dbcolumndesc üye.Daha fazla bilgi için bkz: ITableDefinition veri türü eşleme.

DBPROP_COL_NULLABLE

R/W: Okuma/yazma

Varsayılan: Hiçbiri

Açıklama: Tablo oluştururken, SQL Server yerel istemci ole db sağlayıcı özellik küme ise sütun null değerleri kabul gösterirözellik olmadığında küme, sütun null değeri tarafından belirlendiği şekilde kabul olanağı SQL Server ANSI_NULLS varsayılan veritabanı seçeneği.

The SQL Server Native Client OLE DB provider is an ISO-compliant provider.Bağlı oturumlar ISO davranışlar sergiler.Tüketici yoksa küme dbprop_col_nullable, sütun null değerleri kabul edin.

DBPROP_COL_PRIMARYKEY

R/W: Okuma/yazma

Varsayılan: VARIANT_FALSE açıklaması: Zaman üzerine yazılmasına, SQL Server yerel istemci ole db sağlayıcı oluşturur sütun ile bir birincil anahtar kısıtlaması.

Bir sütunun özellik olarak tanımladığınızda, yalnızca tek bir sütun kısıtlaması saptayabilirsiniz.Özelliği üzerine yazılmasına kadar çok için tek bir sütunu hata verir ayarlamak, SQL Server yerel istemci ole db sağlayıcı çalışır oluşturmak SQL Server tablo.

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

The SQL Server Native Client OLE DB provider 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.

DBPROP_COL_PRIMARYKEY ve DBPROP_COL_UNIQUE her iki üzerine yazılmasına olduğunda db_e_errorsoccurred döndürülür ve dwOption DBPROP_COL_UNIQUE DBPROPOPTIONS_REQUIRED eşittir.Sütun ile tanımlanmış SQL Server kimlik özellik ve DBPROP_COL_PRIMARYKEY dwStatus üye olduğu küme için DBPROPSTATUS_CONFLICTING.

The SQL Server Native Client OLE DB provider returns an error when DBPROP_COL_PRIMARYKEY and DBPROP_COL_NULLABLE are both VARIANT_TRUE.

The SQL Server Native Client OLE DB provider returns an error from SQL Server when the consumer attempts to create a PRIMARY KEY constraint on a column of invalid SQL Server data type.PRIMARY key kısıtlamaları ile oluşturulan sütunlar üzerinde tanımlanamaz SQL Server veri türleri bit, metin, ntext, ve Görüntü.

DBPROP_COL_UNIQUE

R/W: Okuma/yazma

Varsayılan: VARIANT_FALSE açıklaması: Geçerli bir SQL Server benzersiz kısıtlama sütun.

Bir sütunun özellik olarak tanımladığınızda, yalnızca tek bir sütun üzerinde sınırlama uygulanır.Tüketici kullanabilirsiniz IIndexDefinition::CreateIndex birleştirilmiş iki veya daha fazla sütun değerleri benzersiz bir kısıtlama uygulamak.

The SQL Server Native Client OLE DB provider returns DB_S_ERRORSOCCURRED when DBPROP_COL_PRIMARYKEY and DBPROP_COL_UNIQUE are both VARIANT_TRUE and dwOption is not DBPROPOPTIONS_REQUIRED.

DBPROP_COL_PRIMARYKEY ve DBPROP_COL_UNIQUE her iki üzerine yazılmasına olduğunda db_e_errorsoccurred döndürülür ve dwOption DBPROPOPTIONS_REQUIRED eşittir.Sütun ile tanımlanmış SQL Server kimlik özellik ve DBPROP_COL_PRIMARYKEY dwStatus üye olduğu küme için DBPROPSTATUS_CONFLICTING.

The SQL Server Native Client OLE DB provider returns DB_S_ERRORSOCCURRED when DBPROP_COL_NULLABLE and DBPROP_COL_UNIQUE are both VARIANT_TRUE and dwOption is not DBPROPOPTIONS_REQUIRED.

dbprop_col_nullable ve DBPROP_COL_UNIQUE her iki üzerine yazılmasına olduğunda db_e_errorsoccurred döndürülür ve dwOption DBPROPOPTIONS_REQUIRED eşittir.Sütun ile tanımlanmış SQL Server kimlik özellik ve dbprop_col_nullable dwStatus üye olduğu küme için DBPROPSTATUS_CONFLICTING.

The SQL Server Native Client OLE DB provider returns an error from SQL Server when the consumer attempts to create a UNIQUE constraint on a column of invalid SQL Server data type.UNIQUE constraints cannot be defined on columns created with the SQL Server bit data type.

Tüketici çağırdığında ITableDefinition::CreateTable, SQL Server yerel istemci ole db sağlayıcı yorumlar Tablo özellikleri aşağıdadır.

Özellik kimliği

Açıklama

DBPROP_TBL_TEMPTABLE

R/W: Okuma/yazma

Varsayılan: VARIANT_FALSE açıklaması: Varsayılan olarak, SQL Server yerel istemci ole db sağlayıcı tarafından adlı tabloları oluştururtüketici. Zaman üzerine yazılmasına, SQL Server yerel istemci ole db sağlayıcı oluşturur bir geçici tablo adı tüketici.Tüketici ayarlar pTableID parametresi CreateTable null.The ppTableID parameter must contain a valid pointer.

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

Bu örnek oluşturur bir SQL Server tablo.

// 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