none
Insert Select con campo de nombre distinto RRS feed

  • Pregunta

  • Quiero pasar los datos de solo un campo, en la primera tabla se llama cve_prod y en la segunda tabla cve_art, así como les muestro he probado agregando "as" pero da error, ¿alguien me da una pista?

    INSERT INTO INVE_CLIB01 cve_prod
    SELECT cve_art as cve_prod
    FROM inve01

    jueves, 3 de noviembre de 2016 2:56

Respuestas

  • JoséMiel,

    ¿Es posible que la configuración de intercalación diferencie las mayúsculas de las minúsculas (case sensitive)?

    El mensaje de error menciona que el objeto 'inve01' no existe, aún cuando a nuestros ojos el objeto "aparentemente" existe, pero nota que está escrito con letras mayúsculas y que para efectos de una configuración 'CS' se trata de objetos diferentes. Intenta escribir el nombre del objeto tal como lo tienes creado:

    INSERT INTO dbo.INVE_CLIB01 (CVE_PROD)
    SELECT CVE_ART FROM dbo.INVE01


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta JoséMiel viernes, 4 de noviembre de 2016 20:43
    viernes, 4 de noviembre de 2016 4:07

Todas las respuestas

  • JoséMiel,

    La sintaxis básica de la instrucción INSERT es la siguiente:

    INSERT [INTO] Esquema.Tabla [(lista de columnas)] VALUES (lista de valores) | SELECT Lista de valores

    Para que la instrucción de inserción que intentas ejecutar funcione sin problemas es de esperar que las demás columnas tengan una restricción NULL (opcional) o DEFAULT (valor por defecto)

    INSERT INTO dbo.INVE_CLIB01 (cve_prod)
    SELECT cve_art FROM dbo.inve01


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    jueves, 3 de noviembre de 2016 3:43
  • El problema es que el nombre del campo es distinto en ambas tablas. He usado like en vez de "as" pero no funciona.
    jueves, 3 de noviembre de 2016 16:13
  • El problema es que el nombre del campo es distinto en ambas tablas. He usado like en vez de "as" pero no funciona.

    No es necesario que el nombre de la columna de ambas tablas sea el mismo.

    ¿Obtienes el mensaje de error: 'El nombre de columna o los valores especificados no corresponden a la definición de la tabla.'?. Como te mencione en el aporte anterior, el problema que veo -según la consulta que adjuntas-  es que la tabla [INVE_CLIB01] tenga columnas cuyo valor sea requerido (NOT NULL), de ser así, debes de asignar un valor (o default) a dichas columnas, no te bastará con asignar valor a una sola columna. También podría suceder que el tipo de dato de ambas columnas no permita la conversión implícita entre si.

    Sería conveniente que indiques el mensaje de error que obtienes al intentar ejecutar la instrucción que compartes.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    jueves, 3 de noviembre de 2016 17:03
  • Aquí un pantallazo de de la tabla donde van a caer los registros (solo el primer campo) y el mensaje de error. Qué piensan de este error.

    viernes, 4 de noviembre de 2016 2:45
  • JoséMiel,

    ¿Es posible que la configuración de intercalación diferencie las mayúsculas de las minúsculas (case sensitive)?

    El mensaje de error menciona que el objeto 'inve01' no existe, aún cuando a nuestros ojos el objeto "aparentemente" existe, pero nota que está escrito con letras mayúsculas y que para efectos de una configuración 'CS' se trata de objetos diferentes. Intenta escribir el nombre del objeto tal como lo tienes creado:

    INSERT INTO dbo.INVE_CLIB01 (CVE_PROD)
    SELECT CVE_ART FROM dbo.INVE01


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta JoséMiel viernes, 4 de noviembre de 2016 20:43
    viernes, 4 de noviembre de 2016 4:07
  • Hola que tal JoseMiel aca te paso un ejemplo a ver si te ayuda.

    --------------------------------------------------------------------------------------------------------

    USE Tempdb
    GO
    --Creamos la tabla con datos
    CREATE TABLE Inve01(
    Cve_art varchar(15))

    --Insertamos algunos registros
    insert into Inve01(Cve_art) values('Prod1'),('Prod2'),('Prod3'),('Prod4'),('Prod5'),('Prod6'),('Prod7')

    --Consultamos esa tabla
    SELECT Cve_art FROM Inve01

    --Creamos la segunda tabla donde colocaremos los valores
    CREATE TABLE Inve_Clib01(
    Cve_Prod varchar(20),
    CampLib1 varchar(15),
    CampLib2 varchar(15),
    CampLib3 varchar(15),
    CampLib4 varchar(15),
    CampLib5 varchar(15),
    CampLib6 varchar(15))

    --Consultamos la tabla vacia
    SELECT * FROM Inve_Clib01

    --Le agregamos los datos con el Insert
    INSERT INTO Inve_Clib01(Cve_Prod)
    SELECT Cve_art from Inve01

    --Consultamos como se han ingresado los datos
    SELECT * from Inve_Clib01

    Cualquier cosa nos comentas.

    Saludos,

    Jorge Muchaypiña G.


    Business Intelligence Analyst

    viernes, 4 de noviembre de 2016 7:01
  • Excelente William, así funcionó bie, con mayúsculas, me dió un error de primary-key pero era evidente que se trataba de registros duplicados, al borrar los registros y ejecutar de nuevo sube la data tal como se necesitaba, muchas gracias por tu ayuda.
    viernes, 4 de noviembre de 2016 20:40