2011-08-07 28 views
17

Vengo de mySQL a SQL Server. ¿No funciona la siguiente sintaxis en SQL Server?INSERT INTO SET sintaxis en SQL Server

INSERT INTO table SET fil1="234", fil2="324" 

¿Existe una declaración similar en SQL Server?

+5

¡Qué sintaxis confusa! Si no supiera cómo usar la búsqueda web para buscar la [documentación] (http://dev.mysql.com/doc/refman/5.5/en/insert.html), habría pensado que alguien confundió ACTUALIZACIÓN ¡e INSERTAR! –

+0

Ambas respuestas son útiles gracias! –

+13

Realmente detesto la sintaxis actual de SQL. Parece correcto trabajar con tablas pequeñas, pero cuando una tabla comienza a tener muchas columnas, es mucho más agradable usar la sintaxis de valor Col =. – Rhyous

Respuesta

8

SET La forma de insertar los registros no es standard SQL. Si necesita que utilice de similares SQL para actualizaciones e inserciones, se debe utilizar-Procedimientos almacenados en MS SQL Server en lugar, por ejemplo:

CREATE Procedure tableInsertUpdate 
(
    @ID int, 
    @fil1 int, 
    @fil2 int, 
    @IDOut int OUTPUT 
) 
AS 
    IF EXISTS(SELECT ID from table WHERE [email protected]) 
    BEGIN 
     UPDATE table SET 
      fil1 = @fil1 
      fil2 = @fil2 
     WHERE [email protected] 
     SET @IDOut=null 
     END 
     ELSE 
     BEGIN 
     INSERT INTO table 
     (fil1, fil2) 
     VALUES 
     (@fil1, @fil2) 
     SET @IDOut=scope_identity() 
     END 
+1

Esto no es seguro para subprocesos. Puede solucionarlo haciendo que la comprobación existente sea serializable, o reintentando un error de clave duplicado. Se prefiere la última opción, ya que si se serializa generará bloqueos tarde o temprano. –

+0

Es posible que también desee consultar la declaración de MERGE en los Libros en línea. – HLGEM

16
INSERT INTO table (fil1, fil2) VALUES ('234', '324');
+3

Insertar solo tiene esta sintaxis? (tan pobre) –

+4

No necesariamente es algo malo. Dado que no es un estándar SQL. –

+0

@KakYlia, son 6 a uno, media docena a la otra. Ambos requieren que indique explícitamente sus campos si no está INSERTANDO datos para todos los campos. –

8

es sólo una gran molestia que tiene un inserto único e instrucción Update. Comprenderá fácilmente si tiene que trabajar con tablas que contienen 30 columnas.

La variante de MySQL me permite escribir código una vez, y hace las dos cosas necesarias, de hecho, solo necesito reemplazar el nombre del comando en la cadena de consulta.

La variante MSSQL provoca errores al tener casi el mismo código (con respecto a nombres de campo y datos para completar en los campos) 2 veces.

Y si más tarde cambio un solo nombre de campo, significa cambiar 2 posiciones de código, de cualquier manera lo hago en MSSQL. El procedimiento almacenado tiene que ser cambiado y la instrucción de inserción que lo llama en mi código. O las 2 declaraciones diferentes que se necesitan para insertar y actualizar deben cambiarse. Esta fuente obvia de error es completamente culpable (al menos desde mi punto de vista) en MSSQL.

Cuestiones relacionadas