none
Primary key CONCAT 3 columnas RRS feed

  • Pregunta

  • Hola¡

    Pregunta al parecer sencilla pero que no logro hacer, quiero crear una tabla com una llave primaria formada por tres de las 6 columnas que integran dicha nueva tabla de la siguiente manera:

    CREATE TABLE [dbo].[T_COMENTARIOS_NAR](
     CONCAT([ID_COMPA],[MONTHID],[VERSION_ID]) VARCHAR) AS P_KEY  NOT NULL,
     [MONTHID] [int] NOT NULL,
     [ID_COMPA] [varchar](5) NOT NULL,
     [FECHA_CAPTURA] [datetime] NOT NULL,
     [USUARIO] [varchar](50) NOT NULL,
     [COMENTARIO] [varchar](1500) NULL,
     [VERSION_ID] [int] NOT NULL,
     
    GO

     Esto por que P_KEY será mi llave primaria .

    Me pueden ayudar a lograr crear esta tabla, Gracias¡¡¡


    Mgm

    viernes, 7 de junio de 2019 18:25

Respuestas

  • Hola Mgm:

    Una posible solución:

    DROP TABLE if exists dbo.T_comentarios_nar;
    CREATE TABLE dbo.T_Comentarios_nar
    (Id_compa      VARCHAR(5) NOT NULL
    , monthid       INT NOT NULL
    , version_id    INT NOT NULL
    , fecha_Captura DATETIME NOT NULL
    , Usuario       VARCHAR(50) NOT NULL
    , comentario    VARCHAR(1500) NULL
    , columnNueva As (Concat(ID_Compa, cast(monthId as varchar(2)), cast(version_Id as varchar(10)))) PERSISTED PRIMARY KEY
    )
    GO
    

    Ejecución

    INSERT INTO T_Comentarios_nar (Id_compa, monthid, version_id, fecha_Captura, Usuario, comentario)
    VALUES
    ('AAAA',1,1,GETDATE(),'USUARIO','COMMENT');
    go
    SELECT * FROM DBO.T_COMENTARIOS_NAR

    Salida

    Resolución

    Columnas calculadas

    https://docs.microsoft.com/es-es/sql/relational-databases/tables/specify-computed-columns-in-a-table?view=sql-server-2017

    • Propuesto como respuesta Carlos_Ruiz_M lunes, 10 de junio de 2019 13:54
    • Marcado como respuesta Slafco martes, 18 de junio de 2019 18:23
    sábado, 8 de junio de 2019 7:37

Todas las respuestas

  • Hola Mgm:

    Se puede hacer así:

    CREATE TABLE dbo.T_Comentarios_nar
    (Id_compa      VARCHAR(5) NOT NULL
    , monthid       INT NOT NULL
    , version_id    INT NOT NULL
    , fecha_Captura DATETIME NOT NULL
    , Usuario       VARCHAR(50) NOT NULL
    , comentario    VARCHAR(1500) NULL
    , PRIMARY KEY(id_compa, monthid, version_id)
    );

    La clave primaria es como son sus columnas, no es de ningún tipo. La puedes referenciar en la creación como si fuera una columna más, y entre paréntesis quienes la forman.

    Espero te ayude

    • Propuesto como respuesta Carlos_Ruiz_M lunes, 10 de junio de 2019 13:54
    viernes, 7 de junio de 2019 19:53
  • Esto yo ya lo intento y lo que pasa es que al poner :

    PRIMARY KEY(id_compa, monthid, version_id)

    hace que estas tres columnas sean primary key, y lo que yo busco es tener una nueva columna formada por estas tres columnas:id_compa, monthid, version_id y que esta sea la llave primara de mi tabla, es por ello que yo estaba intentando concatener las tres columnas pero no es posible.


    Mgm

    viernes, 7 de junio de 2019 20:05
  • Hola Mgm:

    Una posible solución:

    DROP TABLE if exists dbo.T_comentarios_nar;
    CREATE TABLE dbo.T_Comentarios_nar
    (Id_compa      VARCHAR(5) NOT NULL
    , monthid       INT NOT NULL
    , version_id    INT NOT NULL
    , fecha_Captura DATETIME NOT NULL
    , Usuario       VARCHAR(50) NOT NULL
    , comentario    VARCHAR(1500) NULL
    , columnNueva As (Concat(ID_Compa, cast(monthId as varchar(2)), cast(version_Id as varchar(10)))) PERSISTED PRIMARY KEY
    )
    GO
    

    Ejecución

    INSERT INTO T_Comentarios_nar (Id_compa, monthid, version_id, fecha_Captura, Usuario, comentario)
    VALUES
    ('AAAA',1,1,GETDATE(),'USUARIO','COMMENT');
    go
    SELECT * FROM DBO.T_COMENTARIOS_NAR

    Salida

    Resolución

    Columnas calculadas

    https://docs.microsoft.com/es-es/sql/relational-databases/tables/specify-computed-columns-in-a-table?view=sql-server-2017

    • Propuesto como respuesta Carlos_Ruiz_M lunes, 10 de junio de 2019 13:54
    • Marcado como respuesta Slafco martes, 18 de junio de 2019 18:23
    sábado, 8 de junio de 2019 7:37
  • Efectivamente, ha funcionado¡

    Esta forma de unir columnas para formar la llave compuesta de las tres columnas de la misma tabla, no sabia n había visto, pero muy necesaria cuando se quiere una llave unica

    Gracias Javier¡


    Mgm

    sábado, 8 de junio de 2019 14:09
  • De nada
    sábado, 8 de junio de 2019 14:17