script into all sql database smallsql

into - sql server insert all



¿INSERT condicional con SQL? (5)

Es posible con la condición EXISTS . WHERE EXISTS comprueba la existencia de registros en una subconsulta. EXISTS devuelve true si la subconsulta devuelve uno o más registros. Aquí hay un ejemplo

UPDATE TABLE_NAME SET val1=arg1 , val2=arg2 WHERE NOT EXISTS (SELECT FROM TABLE_NAME WHERE val1=arg1 AND val2=arg2)

Tengo una base de datos que se actualiza con conjuntos de datos de vez en cuando. Aquí puede suceder que se entregue un conjunto de datos que ya existe en la base de datos.

Actualmente estoy haciendo una primera

SELECT FROM ... WHERE val1=... AND val2=...

para verificar, si ya existe un conjunto de datos con estos datos (utilizando los datos en la declaración WHERE). Si esto no devuelve ningún valor, estoy haciendo mi INSERTAR.

Pero esto parece ser un poco complicado para mí. Entonces, mi pregunta: ¿hay algún tipo de INSERT condicional que agregue un nuevo conjunto de datos solo en caso de que no exista?

Estoy usando SmallSQL


No sé acerca de SmallSQL, pero esto funciona para MSSQL:

IF EXISTS (SELECT * FROM Table1 WHERE Column1=''SomeValue'') UPDATE Table1 SET (...) WHERE Column1=''SomeValue'' ELSE INSERT INTO Table1 VALUES (...)

Según la condición de where, esto actualiza la fila si existe, de lo contrario insertará una nueva.

Espero que sea lo que estabas buscando.



Puede hacerlo con una sola declaración y una subconsulta en casi todas las bases de datos relacionales.

INSERT INTO targetTable(field1) SELECT field1 FROM myTable WHERE NOT(field1 IN (SELECT field1 FROM targetTable))

Ciertas bases de datos relacionales han mejorado la sintaxis de lo anterior, ya que lo que describe es una tarea bastante común. SQL Server tiene una sintaxis MERGE con todo tipo de opciones, y MySQL tiene una sintaxis opcional INSERT OR IGNORE .

Edición: la documentación de SmallSQL es bastante dispersa en cuanto a qué partes del estándar SQL implementa. Es posible que no implemente subconsultas y, como tal, es posible que no pueda seguir los consejos anteriores, o en cualquier otro lugar, si necesita quedarse con SmallSQL.


Si está buscando hacer una "sobresalción", una de las formas más eficientes actualmente en SQL Server para filas individuales es esta:

UPDATE myTable ... IF @@ROWCOUNT=0 INSERT INTO myTable ....

También puede usar la sintaxis de MERGE si lo hace con conjuntos de datos en lugar de filas individuales.

Si desea INSERT y no UPDATE , puede escribir su única declaración INSERT y usar WHERE NOT EXISTS (SELECT ...)