martes, 21 de mayo de 2013

Clonar registros de una tabla en SQLSERVER sin que nos de errores de primary key


Supongamos que partimos de una tabla etiqueta con la estructura de campos: impresora, etiqueta, descripcion, programa, flag, etiqAlAncho, EtiqAlAlto. Lo que representan los campos no tienen mucha importancia ahora mismo. 



En dicha tabla tenemos definida una clave para el par impresora, etiqueta. Por tanto si clonamos el registro correspondiente al valor de etiqueta = 22 (por ejemplo suponiendo que exista). El clonado nos lanzará un error de Primary Key) ya que tendremos dos registros con la misma clave. Por tanto para ello utilizamos la sentencia: "insert into Tabla Select ... From .." juntos con la subconsulta "SELECT MAX(ETIQUETA) + 1 FROM ETIQUETAS WHERE IMPRESORA = 2)" con ello conseguimos clonar el registro asignando un valor nuevo a "etiqueta" (el siguiente consecutivo) evitando errores de primray Key. Aquí dejo la sentencia completa:


INSERT INTO ETIQUETAS (IMPRESORA, ETIQUETA, DESCRIPCION, PROGRAMA, FLAG, ETIQALANCHO, ETIQALALTO)
SELECT IMPRESORA, (SELECT MAX(ETIQUETA) + 1 FROM ETIQUETAS WHERE IMPRESORA = 2) ETIQUETA, '70X36 TERMINAL', PROGRAMA, FLAG, ETIQALANCHO, ETIQALALTO FROM ETIQUETAS
WHERE IMPRESORA = 2 AND ETIQUETA = 22

No hay comentarios:

Publicar un comentario

Jesús Moreno - Ingeniero Ténico Informático - consultor Informático

Hola, soy Jesús Moreno Ingeniero Técnico Informático en sistemas por la US y propietario de éste blog. Mi trabajo en los ultimos años se ...