Insertar SQL usando el operador de igualdad

Insertar SQL usando el operador de igualdad

Quería saber si hay una manera de escribir la consulta INSERT en pares clave-valor usando el operador de igualdad. De esa manera sería más intuitivo y más legible. Solo querría saber si es posible. Y SI LO ES entonces ¿cómo?

Por ejemplo, en lugar de escribir de esta manera:

INSERT INTO MyTable (column1, column2, column3, ..., columnX)
VALUES (value1, value2, value3, ..., valueX);

¿Hay algo similar a escribirlo de esta manera?

-- obviously this won't work. But is there something similar that does the job for insert
INSERT INTO MyTable
VALUES (
    column1 = value1,
    column2 = value1,
    column3 = value1,
    .
    .
    columnX = valueX
);

Gracias

Mostrar la mejor respuesta

¿Qué tiene de malo el primer ejemplo?

No hay nada malo, pero creo que te perdiste mi primera línea de pregunta. "Así sería más intuitivo y más legible"

no, el primero es más legible, dice insertar en esta tabla, en este orden de columnas

Creo que ese es un punto de opinión (que está fuera de tema para SO). Usar el operador = en SQL como ese se usaría para definir un alias. Entonces, por ejemplo, SELECT one = 1; devuelve una columna con el alias one con el valor 1.. Al insertar en una columna, si crea una consulta que parece como si estuviera usando alias, eso podría confundir a las personas debido a que la misma sintaxis significa cosas diferentes.

La sintaxis para INSERT es la que es. Si le pregunta a los diseñadores, se supone que SQL es más "natural" que los lenguajes de programación de procedimientos. Las opiniones al respecto pueden variar, pero el hecho es que no se puede escribir un INSERT como si fuera un UPDATE. No importa lo mucho que quieras.

@JeroenMostert eso es exactamente lo que estaba buscando, escribir la consulta INSERT como lo hacemos con la consulta UPDATE

Según la la sintaxis, debe especificar todos los columnas en una lista de columnas, o las omite pero luego debe proporcionar todos los valores para todas las columnas en el orden de la definición de la tabla. Teniendo esto en cuenta, no existe una solución posible en la que especifique las columnas en forma de lista. Incluso ser inteligente usando WITH o subconsultas o uniones no evitará el hecho básico de que esa lista de columnas debe estar allí. Usando WITH, puede sortear el problema del orden de las columnas, pero igual terminará duplicando la lista de columnas.

@JeroenMostert Si hubiera escrito esto como respuesta con algunos ejemplos y referencias adecuadas. Podría considerar aceptarlo como una respuesta.

Advertencia fuerte (cortesía -Jeroen Mostert):

Tenga mucho, mucho cuidado con esto, porque todas las columnas se deben proporcionar exactamente en el orden en que se proporcionaron en CREAR TABLA. Los nombres asociados con las columnas en SELECT se ignorarán por completo. Leer casualmente el código sugeriría lo contrario, y no recomendaría hacer esto en producción.

Mi respuesta original:

No, no hay nada de eso, pero si está insertando todas las columnas excepto las generadas automáticamente, puede usar la siguiente sintaxis con igualdad

INSERT INTO MyTable
SELECT 
    column1 = value1,
    column2 = value1,
    column3 = value1,
    .
    .
    columnX = valueX

Tenga mucho, mucho cuidado con esto, porque todas las columnas deben proporcionarse exactamente en el orden en que se proporcionaron en CREATE TABLE. Los nombres asociados con las columnas en SELECT serán completamente ignorados. Leer casualmente el código sugeriría lo contrario, y no recomendaría hacer esto en producción.

Si no puedo cambiar el orden, entonces no tiene sentido escribirlo así.

La única respuesta válida a la pregunta planteada es NO, no se puede hacer una inserción así.

Gracias por su respuesta, pero esperaré uno o dos días antes de cerrarlo, para que alguien más pueda tener una solución positiva.

Odio reventar tu burbuja, pero no hay una solución positiva. Esta pregunta surge de vez en cuando. Sintácticamente, simplemente no funciona como una declaración de actualización.

Odio cuando tienes razón, pero me sentía optimista. :PAGS