none
Crear una tabla con mas de 1024 columnas RRS feed

  • Pregunta

  • hola, yo tengo una tabla con 1400 columnas, ¿como puedo hacer para que no me marque este error?:

    sql CREATE TABLE failed because column 'cuad8_bayley_el_ce_sum8' in table 'C8' exceeds the maximum of 1024 columns.


    :)

    martes, 30 de julio de 2019 17:44

Respuestas

  • Hola Augusto Mejia:

    Puedes trabajarla con una vista y no directamente con la tabla.

    create table ancha1 (id int not null primary key,
    t1 int null,
    t2 int null,
    t1024 int null)
    go
    create table ancha2 (idAncha2 int not null primary key,
    t1025 int null,
    t1026 int null,
    t1400 int null,
    constraint fk_ancha1 foreign key (idAncha2) references ancha1 (id)
    on update cascade
    on delete cascade
    );
    go
    create view vWAncha
    as
    SELECT a.id, 
           a.t1, 
           a.t2, 
           a.t1024, 
           b.idAncha2, 
           b.t1025, 
           b.t1026, 
           b.t1400
    FROM ancha1 a
         LEFT JOIN Ancha2 b ON a.id = b.idAncha2;
    
    go

    Emulando tu escenario como si las dos tablas tuvieran todas tus columnas

    insert into Ancha1 (id, t1)
    values (1,1);
    insert into Ancha2 (idAncha2, t1400)
    values
    (1,1);
    go
    select * from vWAncha
    go
    update vWAncha set t1025 = 1 where id = 1
    go
    select * from vWAncha
    go
    CREATE PROCEDURE vwAncha_insert
    (@id    INT, 
     @t1    INT, 
     @t2    INT, 
     @t1024 INT, 
     @t1025 INT, 
     @t1026 INT, 
     @t1400 INT
    )
    AS
        BEGIN
            BEGIN TRAN;
            BEGIN TRY
                INSERT INTO Ancha1
                (id, 
                 t1, 
                 t2, 
                 t1024
                )
                VALUES
                (@id, 
                 @t1, 
                 @t2, 
                 @t1024
                );
                INSERT INTO ancha2
                (idAncha2, 
                 t1025, 
                 t1026, 
                 t1400
                )
                VALUES
                (@id, 
                 @t1025, 
                 @t1026, 
                 @t1400
                );
                COMMIT TRAN;
            END TRY
            BEGIN CATCH
                ROLLBACK TRAN;
                THROW;
            END CATCH;
        END;
    GO
    EXEC vwAncha_insert 
     @id    = 2, 
     @t1    = 2, 
     @t2    = null, 
     @t1024 = null, 
     @t1025 = 2, 
     @t1026 = 2, 
     @t1400 = 2;
    go
    SELECT * FROM vWAncha
    GO

    SALIDA

    id          t1          t2          t1024       idAncha2    t1025       t1026       t1400
    ----------- ----------- ----------- ----------- ----------- ----------- ----------- -----------
    1           1           NULL        NULL        1           1           NULL        1
    2           2           NULL        NULL        2           2           2           2
    (2 filas afectadas)

    • Marcado como respuesta Augusto Mejia miércoles, 31 de julio de 2019 15:46
    miércoles, 31 de julio de 2019 3:44

Todas las respuestas

  • Hola, 

    cómo es posible que tengas una tabla con 1400 columnas si a las 1024 te manda un error?

    mira la documentación acá

    saludos


    martes, 30 de julio de 2019 19:04
  • con un sparse pude unir tablas pero no es lo que yo busco, yo quisiera que la tablas aparecieran en mi consulta

    ejemplo:

    CREATE TABLE Sparse(
    NOMBRE VARCHAR (50)
     ,id INT

    ,columna_3 int

    ......

    ......

    ......

    columna_1024 varchar

    ,detalles_ocultos XML COLUMN_SET FOR ALL_SPARSE_COLUMNS
    ,ancho DECIMAL(10, 2) Sparse NULL
    ,altura DECIMAL(10, 2) Sparse NULL
    ,peso DECIMAL(10, 2) Sparse NULL
    ,folio VARCHAR(10) Sparse NULL
    ,DLR DECIMAL(10, 2) Sparse NULL
    )

     tengo esa tabla hecha con el sparse pero no me gusta como me muestra los datos porque es xml.

    :)





    martes, 30 de julio de 2019 19:40
  • Hola Augusto Mejia:

    Puedes trabajarla con una vista y no directamente con la tabla.

    create table ancha1 (id int not null primary key,
    t1 int null,
    t2 int null,
    t1024 int null)
    go
    create table ancha2 (idAncha2 int not null primary key,
    t1025 int null,
    t1026 int null,
    t1400 int null,
    constraint fk_ancha1 foreign key (idAncha2) references ancha1 (id)
    on update cascade
    on delete cascade
    );
    go
    create view vWAncha
    as
    SELECT a.id, 
           a.t1, 
           a.t2, 
           a.t1024, 
           b.idAncha2, 
           b.t1025, 
           b.t1026, 
           b.t1400
    FROM ancha1 a
         LEFT JOIN Ancha2 b ON a.id = b.idAncha2;
    
    go

    Emulando tu escenario como si las dos tablas tuvieran todas tus columnas

    insert into Ancha1 (id, t1)
    values (1,1);
    insert into Ancha2 (idAncha2, t1400)
    values
    (1,1);
    go
    select * from vWAncha
    go
    update vWAncha set t1025 = 1 where id = 1
    go
    select * from vWAncha
    go
    CREATE PROCEDURE vwAncha_insert
    (@id    INT, 
     @t1    INT, 
     @t2    INT, 
     @t1024 INT, 
     @t1025 INT, 
     @t1026 INT, 
     @t1400 INT
    )
    AS
        BEGIN
            BEGIN TRAN;
            BEGIN TRY
                INSERT INTO Ancha1
                (id, 
                 t1, 
                 t2, 
                 t1024
                )
                VALUES
                (@id, 
                 @t1, 
                 @t2, 
                 @t1024
                );
                INSERT INTO ancha2
                (idAncha2, 
                 t1025, 
                 t1026, 
                 t1400
                )
                VALUES
                (@id, 
                 @t1025, 
                 @t1026, 
                 @t1400
                );
                COMMIT TRAN;
            END TRY
            BEGIN CATCH
                ROLLBACK TRAN;
                THROW;
            END CATCH;
        END;
    GO
    EXEC vwAncha_insert 
     @id    = 2, 
     @t1    = 2, 
     @t2    = null, 
     @t1024 = null, 
     @t1025 = 2, 
     @t1026 = 2, 
     @t1400 = 2;
    go
    SELECT * FROM vWAncha
    GO

    SALIDA

    id          t1          t2          t1024       idAncha2    t1025       t1026       t1400
    ----------- ----------- ----------- ----------- ----------- ----------- ----------- -----------
    1           1           NULL        NULL        1           1           NULL        1
    2           2           NULL        NULL        2           2           2           2
    (2 filas afectadas)

    • Marcado como respuesta Augusto Mejia miércoles, 31 de julio de 2019 15:46
    miércoles, 31 de julio de 2019 3:44