2010-03-17 29 views
69

En SQL Server 2005, estoy tratando de descubrir por qué no puedo insertar varios campos en una tabla. La siguiente consulta, que inserta un registro, funciona bien:Insertar valores múltiples usando INSERT INTO (SQL Server 2005)

INSERT INTO [MyDB].[dbo].[MyTable] 
      ([FieldID] 
      ,[Description]) 
    VALUES 
      (1000,N'test') 

Sin embargo, la siguiente consulta, que especifica más de un valor, falla:

INSERT INTO [MyDB].[dbo].[MyTable] 
      ([FieldID] 
      ,[Description]) 
    VALUES 
      (1000,N'test'),(1001,N'test2') 

me sale este mensaje:

Msg 102, Level 15, State 1, Line 5 
Incorrect syntax near ','. 

Cuando busqué la ayuda para INSERT en SQL Sever Management Studio, uno de sus ejemplos mostró el uso de la sintaxis "Valores" que utilicé (con grupos de valores entre paréntesis y separados por comas). La documentación de ayuda que encontré en SQL Server Management Studio parece que es para SQL Server 2008, por lo que quizás esa sea la razón por la que la inserción no funciona. De cualquier manera, no puedo entender por qué no va a funcionar.

+0

Simplemente curioso si se trató sin el ',' entre los conjuntos de valores? Sé que esta publicación es bastante antigua, pero soy curioso. Encontré esto cuando estaba buscando una respuesta, y la mayor parte de mi conocimiento SQL está en los últimos años. – Malachi

+0

posible duplicado de [¿Cómo puedo insertar varias filas SIN repetir la parte "INSERT INTO dbo.Blah" de la declaración?] (Http://stackoverflow.com/questions/2624713/how-do-i-insert-multiple- rows-without-repeating-the-insert-into-dbo-blah-part) –

Respuesta

94

La sintaxis que utiliza es nuevo en SQL Server 2008:

INSERT INTO [MyDB].[dbo].[MyTable] 
     ([FieldID] 
     ,[Description]) 
VALUES 
     (1000,N'test'),(1001,N'test2') 

Para SQL Server 2005, se tendrá que utilizar múltiples INSERT declaraciones:

INSERT INTO [MyDB].[dbo].[MyTable] 
     ([FieldID] 
     ,[Description]) 
VALUES 
     (1000,N'test') 

INSERT INTO [MyDB].[dbo].[MyTable] 
     ([FieldID] 
     ,[Description]) 
VALUES 
     (1001,N'test2') 

Otra opción es utilizar UNION ALL:

INSERT INTO [MyDB].[dbo].[MyTable] 
     ([FieldID] 
     ,[Description]) 
SELECT 1000, N'test' UNION ALL 
SELECT 1001, N'test2' 
+1

Gracias por la explicación. El Select/Union funcionó de maravilla. –

+0

Muchas gracias por esto. Usamos SQL 2005 para el sistema de prueba mientras desarrollamos en SQL 2008. Algunos de los desarrolladores no estaban conscientes del hecho de que esta sintaxis solo está disponible en SQL 2005. – aheil

+0

@Downvoter - ¿me gustaría comentar? – Oded

9

También puede usar la siguiente sintaxis: -

INSERT INTO MyTable (FirstCol, SecondCol) 
SELECT 'First' ,1 
UNION ALL 
SELECT 'Second' ,2 
UNION ALL 
SELECT 'Third' ,3 
UNION ALL 
SELECT 'Fourth' ,4 
UNION ALL 
SELECT 'Fifth' ,5 
GO 

De here

0

En SQL Server 2008,2012,2014 puede insertar varias filas utilizando una sola instrucción SQL INSERT.

INSERT INTO TableName (Column1, Column2) VALUES 
    (Value1, Value2), (Value1, Value2) 

Otra forma

INSERT INTO TableName (Column1, Column2) 
SELECT Value1 ,Value2 
UNION ALL 
SELECT Value1 ,Value2 
UNION ALL 
SELECT Value1 ,Value2 
UNION ALL 
SELECT Value1 ,Value2 
UNION ALL 
SELECT Value1 ,Value2 
Cuestiones relacionadas