Crear tablas de SQL Server

 

El SQL Server proveedor OLE DB de Native Client expone la ITableDefinition:: CreateTable función, lo que permite a los consumidores crear SQL Server tablas. Los consumidores utilizan CreateTable para crear tablas permanentes denominadas por el consumidor y tablas permanentes o temporales con nombres únicos generados por el SQL Server proveedor Native Client OLE DB.

Cuando el consumidor llama ITableDefinition:: CreateTable, si el valor de la propiedad DBPROP_TBL_TEMPTABLE es VARIANT_TRUE, la SQL Server proveedor OLE DB de Native Client genera un nombre de tabla temporal para el consumidor. El consumidor establece el pTableID parámetro de la CreateTable método en NULL. Las tablas temporales con nombres generados por el SQL Server proveedor OLE DB de Native Client no aparecen en la tablas conjunto de filas, pero son accesibles a través de la IOpenRowset interfaz.

Cuando los consumidores especifican el nombre de tabla en la pwszName miembro de la uName union en la pTableID parámetro, el SQL Server proveedor OLE DB de Native Client crea un SQL Server tabla con ese nombre. Se aplican las restricciones de denominación de tabla de SQL Server y el nombre de tabla puede indicar una tabla permanente o una tabla temporal local o global. Para obtener más información, consulte CREATE TABLE. El ppTableID parámetro puede ser NULL.

El SQL Server proveedor OLE DB de Native Client puede generar los nombres de tablas permanentes o temporales. Cuando el consumidor establece el pTableID parámetro en NULL y conjuntos de ppTableID para que apunte a un DBID válido*, el SQL Server proveedor OLE DB de Native Client devuelve el nombre generado de la tabla en la pwszName miembro de la uName unión de DBID señalado por el valor de ppTableID. Para crear un archivo temporal, SQL Server tabla denominadas por el proveedor OLE DB de Native Client, el consumidor incluye la propiedad de tabla DBPROP_TBL_TEMPTABLE de OLE DB en una propiedad de tabla establecido que se hace referencia en el rgPropertySets parámetro. SQL ServerNative Client OLE DB denominado proveedor tablas temporales son locales.

CreateTable devuelve DB_E_BADTABLEID si el eKind miembro de la pTableID parámetro no indica DBKIND_NAME.

El consumidor puede indicar un tipo de datos de columna mediante el uso del pwszTypeName miembro o wType miembro. Si el consumidor especifica el tipo de datos en pwszTypeName, SQL Server proveedor OLE DB de Native Client omite el valor de wType.

Si usa el pwszTypeName miembro, el consumidor especifica el tipo de datos mediante el uso de SQL Server nombres de tipo de datos. Los nombres de tipo de datos válidos son aquéllos devueltos en la columna TYPE_NAME del conjunto de filas de esquema PROVIDER_TYPES.

El SQL Server proveedor OLE DB de Native Client reconoce un subconjunto de valores DBTYPE enumerados por OLE DB en el wType miembro. Para obtener más información, consulte Data Type Mapping en ITableDefinition.

System_CAPS_ICON_note.jpg Nota


CreateTable devuelve DB_E_BADTYPE si el consumidor establece el Pclsid o pTypeInfo miembro para especificar el tipo de datos de columna.

El consumidor especifica el nombre de columna en la pwszName miembro de la uName unión de DBCOLUMNDESC dbcid miembro. El nombre de columna se especifica como una cadena de caracteres Unicode. El eKind miembro de dbcid debe ser DBKIND_NAME. CreateTable devuelve DB_E_BADCOLUMNID si eKind no es válida, pwszName es NULL, o si el valor de pwszName no es válido SQL Server identificador.

Todas las propiedades de columna están disponibles en todas las columnas definidas para la tabla. CreateTable puede devolver DB_S_ERRORSOCCURRED o DB_E_ERRORSOCCURRED si los valores de propiedad se establecen en conflicto. CreateTable devuelve un error cuando la configuración de propiedad de columna no válida hace SQL Server error de creación de la tabla.

Las propiedades de columna de un DBCOLUMNDESC se interpretan como sigue.

Id. de propiedadDescription
DBPROP_COL_AUTOINCREMENTL/E lectura/escritura

Valor predeterminado: VARIANT_FALSE. Descripción: establece la propiedad de identidad en la columna creada. Para SQL Server, la propiedad de identidad es válida para una columna única dentro de una tabla. Establecer la propiedad en VARIANT_TRUE para más de una sola columna genera un error cuando la SQL Server proveedor OLE DB de Native Client intenta crear la tabla en el servidor.

El SQL Server propiedad identity solo es válida para el entero, numérico, y decimal tipos cuando la escala es 0. Establecer la propiedad en VARIANT_TRUE en una columna de cualquier otro tipo de datos genera un error cuando la SQL Server proveedor OLE DB de Native Client intenta crear la tabla en el servidor.

El SQL Server proveedor OLE DB de Native Client devuelve DB_S_ERRORSOCCURRED cuando DBPROP_COL_AUTOINCREMENT y DBPROP_COL_NULLABLE son VARIANT_TRUE y dwOption de DBPROP_COL_NULLABLE no es DBPROPOPTIONS_REQUIRED. Se devuelve DB_E_ERRORSOCCURRED cuando DBPROP_COL_AUTOINCREMENT y DBPROP_COL_NULLABLE son VARIANT_TRUE y dwOption de DBPROP_COL_NULLABLE es igual a DBPROPOPTIONS_REQUIRED. La columna se define con el SQL Server propiedad de identidad y el DBPROP_COL_NULLABLE dwStatus miembro se establece en DBPROPSTATUS_CONFLICTING.
DBPROP_COL_DEFAULTL/E lectura/escritura

Valor predeterminado: ninguno

Descripción: crea la restricción DEFAULT de SQL Server para la columna.

El vValue miembro DBPROP puede ser cualquiera de varios tipos. El vValue.vt miembro debe especificar un tipo compatible con el tipo de datos de la columna. Por ejemplo, la definición de BSTR N/A como el valor predeterminado para una columna definida como DBTYPE_WSTR es una coincidencia compatible. Definir el mismo valor predeterminado en una columna definida como DBTYPE_R8 genera un error cuando la SQL Server proveedor OLE DB de Native Client intenta crear la tabla en el servidor.
DBPROP_COL_DESCRIPTIONL/E lectura/escritura

Valor predeterminado: ninguno

Descripción: La propiedad de columna DBPROP_COL_DESCRIPTION no implementa la SQL Server proveedor Native Client OLE DB.

El dwStatus miembro de la estructura DBPROP devuelve DBPROPSTATUS_NOTSUPPORTED cuando el consumidor intenta escribir el valor de propiedad.

Establecer la propiedad no constituye un error grave para el SQL Server proveedor Native Client OLE DB. Si todos los demás valores de parámetro son válidos, se crea la tabla de SQL Server.
DBPROP_COL_FIXEDLENGTHL/E lectura/escritura

Valor predeterminado: VARIANT_FALSE

Descripción: El SQL Server proveedor OLE DB de Native Client utiliza DBPROP_COL_FIXEDLENGTH para determinar la asignación de tipos de datos cuando el consumidor define el tipo de datos de una columna mediante el uso de la wType miembro de DBCOLUMNDESC. Para obtener más información, consulte Data Type Mapping en ITableDefinition.
DBPROP_COL_NULLABLEL/E lectura/escritura

Valor predeterminado: ninguno

Descripción: Cuando se crea la tabla, el SQL Server proveedor OLE DB de Native Client indica si la columna debe aceptar valores null si se establece la propiedad. Cuando no se establece la propiedad, la capacidad de la columna de aceptar valores NULL como valores está determinada por la opción de base de datos predeterminada ANSI_NULLS de SQL Server.

El SQL Server proveedor Native Client OLE DB es un proveedor compatible con ISO. Las sesiones conectadas exhiben los comportamientos ISO. Si el consumidor no establece DBPROP_COL_NULLABLE, las columnas aceptan valores nulos.
DBPROP_COL_PRIMARYKEYL/E lectura/escritura

Valor predeterminado: VARIANT_FALSE. Descripción: cuando VARIANT_TRUE, la SQL Server proveedor OLE DB de Native Client crea la columna con una restricción PRIMARY KEY.

Cuando se define como una propiedad de columna, solo una columna única puede determinar la restricción. Establecer la propiedad VARIANT_TRUE para más de una sola columna devuelve un error cuando la SQL Server proveedor OLE DB de Native Client intenta crear la SQL Server tabla.

Nota: El consumidor puede utilizar IIndexDefinition:: CreateIndex para crear una restricción PRIMARY KEY en dos o más columnas.

El SQL Server proveedor OLE DB de Native Client devuelve DB_S_ERRORSOCCURRED cuando DBPROP_COL_PRIMARYKEY y DBPROP_COL_UNIQUE son VARIANT_TRUE y dwOption de DBPROP_COL_UNIQUE no es DBPROPOPTIONS_REQUIRED.

Se devuelve DB_E_ERRORSOCCURRED cuando DBPROP_COL_PRIMARYKEY y DBPROP_COL_UNIQUE son VARIANT_TRUE y dwOption de DBPROP_COL_UNIQUE es igual a DBPROPOPTIONS_REQUIRED. La columna se define con el SQL Server propiedad de identidad y el DBPROP_COL_PRIMARYKEY dwStatus miembro se establece en DBPROPSTATUS_CONFLICTING.

El SQL Server proveedor Native Client OLE DB devuelve un error cuando DBPROP_COL_PRIMARYKEY y DBPROP_COL_NULLABLE son VARIANT_TRUE.

El SQL Server proveedor Native Client OLE DB devuelve un error de SQL Server cuando el consumidor intenta crear una restricción PRIMARY KEY en una columna de válido SQL Server tipo de datos. Las restricciones PRIMARY KEY no pueden definirse en las columnas creadas con el SQL Server tipos de datos bits, texto, ntext, y imagen.
DBPROP_COL_UNIQUEL/E lectura/escritura

Valor predeterminado: VARIANT_FALSE. Descripción: aplica una restricción UNIQUE de SQL Server a la columna.

Cuando se define como una propiedad de columna, la restricción solo se aplica en una columna única. El consumidor puede utilizar IIndexDefinition:: CreateIndex para aplicar una restricción UNIQUE en los valores combinados de dos o más columnas.

El SQL Server proveedor OLE DB de Native Client devuelve DB_S_ERRORSOCCURRED cuando DBPROP_COL_PRIMARYKEY y DBPROP_COL_UNIQUE son VARIANT_TRUE y dwOption no es DBPROPOPTIONS_REQUIRED.

Se devuelve DB_E_ERRORSOCCURRED cuando DBPROP_COL_PRIMARYKEY y DBPROP_COL_UNIQUE son VARIANT_TRUE y dwOption es igual a DBPROPOPTIONS_REQUIRED. La columna se define con el SQL Server propiedad de identidad y el DBPROP_COL_PRIMARYKEY dwStatus miembro se establece en DBPROPSTATUS_CONFLICTING.

El SQL Server proveedor OLE DB de Native Client devuelve DB_S_ERRORSOCCURRED cuando DBPROP_COL_NULLABLE y DBPROP_COL_UNIQUE son VARIANT_TRUE y dwOption no es DBPROPOPTIONS_REQUIRED.

Se devuelve DB_E_ERRORSOCCURRED cuando DBPROP_COL_NULLABLE y DBPROP_COL_UNIQUE son VARIANT_TRUE y dwOption es igual a DBPROPOPTIONS_REQUIRED. La columna se define con el SQL Server propiedad de identidad y el DBPROP_COL_NULLABLE dwStatus miembro se establece en DBPROPSTATUS_CONFLICTING.

El SQL Server proveedor Native Client OLE DB devuelve un error de SQL Server cuando el consumidor intenta crear una restricción UNIQUE en una columna de válido SQL Server tipo de datos. No se puede definir restricciones UNIQUE en las columnas creadas con el SQL Server bits tipo de datos.

Cuando el consumidor llama ITableDefinition:: CreateTable, el SQL Server proveedor OLE DB de Native Client interpreta las propiedades de la tabla como sigue.

Id. de propiedadDescription
DBPROP_TBL_TEMPTABLEL/E lectura/escritura

Valor predeterminado: VARIANT_FALSE. Descripción: de forma predeterminada, la SQL Server proveedor OLE DB de Native Client crea tablas denominadas por el consumidor. Cuando VARIANT_TRUE, la SQL Server proveedor OLE DB de Native Client genera un nombre de tabla temporal para el consumidor. El consumidor establece el pTableID parámetro de CreateTable en NULL. El ppTableID parámetro debe contener un puntero válido.

Si el consumidor solicita que se abra un conjunto de filas en una tabla se creó correctamente, el SQL Server proveedor OLE DB de Native Client abre un conjunto de filas compatible con cursores. Las propiedades del conjunto de filas se pueden indicar en los conjuntos de propiedades pasados.

En este ejemplo se crea una tabla de 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);  
    }  

Tablas e índices

Adiciones de comunidad

AGREGAR
Mostrar: