Membuat Tabel Klien Asli SQL Server

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System (PDW)

Penyedia SQL Server Native Client OLE DB mengekspos fungsi ITableDefinition::CreateTable , yang memungkinkan konsumen membuat tabel SQL Server. Konsumen menggunakan CreateTable untuk membuat tabel permanen bernama konsumen, dan tabel permanen atau sementara dengan nama unik yang dihasilkan oleh penyedia SQL Server Native Client OLE DB.

Ketika konsumen memanggil ITableDefinition::CreateTable, jika nilai properti DBPROP_TBL_TEMPTABLE VARIANT_TRUE, penyedia SQL Server Native Client OLE DB menghasilkan nama tabel sementara untuk konsumen. Konsumen mengatur parameter pTableID dari metode CreateTable ke NULL. Tabel sementara dengan nama yang dihasilkan oleh penyedia SQL Server Native Client OLE DB tidak muncul di set baris TABLES , tetapi dapat diakses melalui antarmuka IOpenRowset .

Saat konsumen menentukan nama tabel di anggota pwszName dari union uName dalam parameter pTableID, penyedia SQL Server Native Client OLE DB membuat tabel SQL Server dengan nama tersebut. Batasan penamaan tabel SQL Server berlaku, dan nama tabel dapat menunjukkan tabel permanen, atau tabel sementara lokal atau global. Untuk informasi selengkapnya, lihat CREATE TABLE. Parameter ppTableID dapat berupa NULL.

Penyedia SQL Server Native Client OLE DB dapat menghasilkan nama tabel permanen atau sementara. Ketika konsumen mengatur parameter pTableID ke NULL dan mengatur ppTableID untuk menunjuk ke DBID yang valid*, penyedia SQL Server Native Client OLE DB mengembalikan nama tabel yang dihasilkan di anggota pwszName dari union uName DBID yang diarahkan oleh nilai ppTableID. Untuk membuat tabel bernama penyedia SQL Server Native Client OLE DB sementara, konsumen menyertakan properti tabel OLE DB DBPROP_TBL_TEMPTABLE dalam kumpulan properti tabel yang direferensikan dalam parameter rgPropertySets . Tabel sementara bernama penyedia SQL Server Native Client OLE DB bersifat lokal.

CreateTable mengembalikan DB_E_BADTABLEID jika anggota eKind dari parameter pTableID tidak menunjukkan DBKIND_NAME.

Penggunaan DBCOLUMNDESC

Konsumen dapat menunjukkan jenis data kolom dengan menggunakan anggota pwszTypeName atau anggota wType . Jika konsumen menentukan jenis data dalam pwszTypeName, penyedia SQL Server Native Client OLE DB mengabaikan nilai wType.

Jika menggunakan anggota pwszTypeName , konsumen menentukan jenis data dengan menggunakan nama jenis data SQL Server. Nama jenis data yang valid adalah yang dikembalikan di kolom TYPE_NAME kumpulan baris skema PROVIDER_TYPES.

Penyedia SQL Server Native Client OLE DB mengenali subset nilai DBTYPE yang dijumlahkan OLE DB di anggota wType . Untuk informasi selengkapnya, lihat Pemetaan Tipe Data di ITableDefinition.

Catatan

CreateTable mengembalikan DB_E_BADTYPE jika konsumen menetapkan pTypeInfo atau anggota pclsid untuk menentukan jenis data kolom.

Konsumen menentukan nama kolom di anggota pwszName dari union uName anggota dbcid DBCOLUMNDESC. Nama kolom ditentukan sebagai string karakter Unicode. Anggota eKinddbcid harus DBKIND_NAME. CreateTable mengembalikan DB_E_BADCOLUMNID jika eKind tidak valid, pwszName adalah NULL, atau jika nilai pwszName bukan pengidentifikasi SQL Server yang valid.

Semua properti kolom tersedia di semua kolom yang ditentukan untuk tabel. CreateTable dapat mengembalikan DB_S_ERRORSOCCURRED atau DB_E_ERRORSOCCURRED jika nilai properti diatur dalam konflik. CreateTable mengembalikan kesalahan ketika pengaturan properti kolom yang tidak valid menyebabkan kegagalan pembuatan tabel SQL Server.

Properti kolom dalam DBCOLUMNDESC ditafsirkan sebagai berikut.

ID Properti Deskripsi
DBPROP_COL_AUTOINCREMENT R/W: Baca/tulis

Default: deskripsi VARIANT_FALSE: Mengatur properti identitas pada kolom yang dibuat. Untuk SQL Server, properti identitas valid untuk satu kolom dalam tabel. Mengatur properti ke VARIANT_TRUE untuk lebih dari satu kolom menghasilkan kesalahan ketika penyedia SQL Server Native Client OLE DB mencoba membuat tabel di server.

Properti identitas SQL Server hanya valid untuk tipe bilangan bulat, numerik, dan desimal saat skala adalah 0. Mengatur properti ke VARIANT_TRUE pada kolom jenis data lain menghasilkan kesalahan ketika penyedia SQL Server Native Client OLE DB mencoba membuat tabel di server.

Penyedia SQL Server Native Client OLE DB mengembalikan DB_S_ERRORSOCCURRED ketika DBPROP_COL_AUTOINCREMENT dan DBPROP_COL_NULLABLE VARIANT_TRUE dan dwOption DBPROP_COL_NULLABLE tidak DBPROPOPTIONS_REQUIRED. DB_E_ERRORSOCCURRED dikembalikan ketika DBPROP_COL_AUTOINCREMENT dan DBPROP_COL_NULLABLE VARIANT_TRUE dan dwOption DBPROP_COL_NULLABLE sama dengan DBPROPOPTIONS_REQUIRED. Kolom ditentukan dengan properti identitas SQL Server dan anggota DBPROP_COL_NULLABLE dwStatus diatur ke DBPROPSTATUS_CONFLICTING.
DBPROP_COL_DEFAULT R/W: Baca/tulis

Default: Tidak Ada

Deskripsi: Membuat batasan DEFAULT SQL Server untuk kolom.

Anggota vValue DBPROP dapat berupa salah satu dari sejumlah jenis. Anggota vValue.vt harus menentukan jenis yang kompatibel dengan jenis data kolom. Misalnya, mendefinisikan BSTR N/A sebagai nilai default untuk kolom yang didefinisikan sebagai DBTYPE_WSTR adalah kecocokan yang kompatibel. Menentukan default yang sama pada kolom yang didefinisikan sebagai DBTYPE_R8 menghasilkan kesalahan ketika penyedia SQL Server Native Client OLE DB mencoba membuat tabel di server.
DBPROP_COL_DESCRIPTION R/W: Baca/tulis

Default: Tidak Ada

Deskripsi: Properti kolom DBPROP_COL_DESCRIPTION tidak diimplementasikan oleh penyedia SQL Server Native Client OLE DB.

Anggota dwStatus dari struktur DBPROP mengembalikan DBPROPSTATUS_NOTSUPPORTED ketika konsumen mencoba menulis nilai properti.

Mengatur properti tidak merupakan kesalahan fatal untuk penyedia SQL Server Native Client OLE DB. Jika semua nilai parameter lainnya valid, tabel SQL Server dibuat.
DBPROP_COL_FIXEDLENGTH R/W: Baca/tulis

Default: VARIANT_FALSE

Deskripsi: Penyedia SQL Server Native Client OLE DB menggunakan DBPROP_COL_FIXEDLENGTH untuk menentukan pemetaan jenis data saat konsumen menentukan jenis data kolom dengan menggunakan anggota wType DBCOLUMNDESC. Untuk informasi selengkapnya, lihat Pemetaan Tipe Data di ITableDefinition.
DBPROP_COL_NULLABLE R/W: Baca/tulis

Default: Tidak Ada

Deskripsi: Saat membuat tabel, penyedia SQL Server Native Client OLE DB menunjukkan apakah kolom harus menerima nilai null jika properti diatur. Ketika properti tidak diatur, kemampuan kolom untuk menerima NULL sebagai nilai ditentukan oleh opsi database default SQL Server ANSI_NULLS.

Penyedia SQL Server Native Client OLE DB adalah penyedia yang mematuhi ISO. Sesi yang terhubung menunjukkan perilaku ISO. Jika konsumen tidak mengatur DBPROP_COL_NULLABLE, kolom menerima nilai null.
DBPROP_COL_PRIMARYKEY R/W: Baca/tulis

Default: deskripsi VARIANT_FALSE: Saat VARIANT_TRUE, penyedia SQL Server Native Client OLE DB membuat kolom dengan batasan KUNCI PRIMER.

Saat didefinisikan sebagai properti kolom, hanya satu kolom yang dapat menentukan batasan. Mengatur properti VARIANT_TRUE untuk lebih dari satu kolom mengembalikan kesalahan ketika penyedia SQL Server Native Client OLE DB mencoba membuat tabel SQL Server.

Catatan: Konsumen dapat menggunakan IIndexDefinition::CreateIndex untuk membuat batasan KUNCI PRIMER pada dua kolom atau lebih.

Penyedia SQL Server Native Client OLE DB mengembalikan DB_S_ERRORSOCCURRED ketika DBPROP_COL_PRIMARYKEY dan DBPROP_COL_UNIQUE VARIANT_TRUE dan dwOption DBPROP_COL_UNIQUE tidak DBPROPOPTIONS_REQUIRED.

DB_E_ERRORSOCCURRED dikembalikan ketika DBPROP_COL_PRIMARYKEY dan DBPROP_COL_UNIQUE VARIANT_TRUE dan dwOption DBPROP_COL_UNIQUE sama dengan DBPROPOPTIONS_REQUIRED. Kolom didefinisikan dengan properti identitas SQL Server dan anggota DBPROP_COL_PRIMARYKEY dwStatus diatur ke DBPROPSTATUS_CONFLICTING.

Penyedia SQL Server Native Client OLE DB mengembalikan kesalahan ketika DBPROP_COL_PRIMARYKEY dan DBPROP_COL_NULLABLE keduanya VARIANT_TRUE.

Penyedia SQL Server Native Client OLE DB mengembalikan kesalahan dari SQL Server ketika konsumen mencoba membuat batasan KUNCI PRIMER pada kolom jenis data SQL Server yang tidak valid. Batasan KUNCI PRIMER tidak dapat ditentukan pada kolom yang dibuat dengan bit jenis data SQL Server, teks, ntext, dan gambar.
DBPROP_COL_UNIQUE R/W: Baca/tulis

Default: deskripsi VARIANT_FALSE: Menerapkan batasan SQL Server UNIQUE ke kolom.

Saat didefinisikan sebagai properti kolom, batasan hanya diterapkan pada satu kolom. Konsumen dapat menggunakan IIndexDefinition::CreateIndex untuk menerapkan batasan UNIK pada nilai gabungan dua kolom atau lebih.

Penyedia SQL Server Native Client OLE DB mengembalikan DB_S_ERRORSOCCURRED ketika DBPROP_COL_PRIMARYKEY dan DBPROP_COL_UNIQUE VARIANT_TRUE dan dwOption tidak DBPROPOPTIONS_REQUIRED.

DB_E_ERRORSOCCURRED dikembalikan ketika DBPROP_COL_PRIMARYKEY dan DBPROP_COL_UNIQUE sama dengan VARIANT_TRUE dan dwOption DBPROPOPTIONS_REQUIRED. Kolom didefinisikan dengan properti identitas SQL Server dan anggota DBPROP_COL_PRIMARYKEY dwStatus diatur ke DBPROPSTATUS_CONFLICTING.

Penyedia SQL Server Native Client OLE DB mengembalikan DB_S_ERRORSOCCURRED ketika DBPROP_COL_NULLABLE dan DBPROP_COL_UNIQUE VARIANT_TRUE dan dwOption tidak DBPROPOPTIONS_REQUIRED.

DB_E_ERRORSOCCURRED dikembalikan ketika DBPROP_COL_NULLABLE dan DBPROP_COL_UNIQUE sama dengan VARIANT_TRUE dan dwOption sama dengan DBPROPOPTIONS_REQUIRED. Kolom ditentukan dengan properti identitas SQL Server dan anggota DBPROP_COL_NULLABLE dwStatus diatur ke DBPROPSTATUS_CONFLICTING.

Penyedia SQL Server Native Client OLE DB mengembalikan kesalahan dari SQL Server ketika konsumen mencoba membuat batasan UNIK pada kolom jenis data SQL Server yang tidak valid. Batasan UNIK tidak dapat ditentukan pada kolom yang dibuat dengan jenis data bit SQL Server.

Saat konsumen memanggil ITableDefinition::CreateTable, penyedia SQL Server Native Client OLE DB menginterpretasikan properti tabel sebagai berikut.

ID Properti Deskripsi
DBPROP_TBL_TEMPTABLE R/W: Baca/tulis

Default: deskripsi VARIANT_FALSE: Secara default, penyedia SQL Server Native Client OLE DB membuat tabel yang dinamai oleh konsumen. Saat VARIANT_TRUE, penyedia SQL Server Native Client OLE DB menghasilkan nama tabel sementara untuk konsumen. Konsumen mengatur parameter pTableID dari CreateTable ke NULL. Parameter ppTableID harus berisi penunjuk yang valid.

Jika konsumen meminta agar set baris dibuka pada tabel yang berhasil dibuat, penyedia SQL Server Native Client OLE DB membuka set baris yang didukung kursor. Properti set baris apa pun dapat ditunjukkan dalam kumpulan properti yang diteruskan.

Contoh ini membuat tabel 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);  
    }  

Lihat Juga

Tabel dan Indeks