Sé que he hecho esto antes hace años, pero no puedo recordar la sintaxis, y no puedo encontrarla en ningún lado debido a la extracción de toneladas de documentos de ayuda y artículos sobre "importaciones masivas".
Esto es lo que quiero hacer, pero la sintaxis no es exactamente la correcta ... por favor, alguien que haya hecho esto antes, ayúdame :)
INSERT INTO dbo.MyTable (ID, Name)
VALUES (123, 'Timmy'),
(124, 'Jonny'),
(125, 'Sally')
Sé que esto está cerca de la sintaxis correcta. Puede que necesite la palabra "BULK" allí, o algo, no recuerdo. ¿Alguna idea?
Necesito esto para una base de datos SQL Server 2005. He intentado este código, en vano:
DECLARE @blah TABLE
(
ID INT NOT NULL PRIMARY KEY,
Name VARCHAR(100) NOT NULL
)
INSERT INTO @blah (ID, Name)
VALUES (123, 'Timmy')
VALUES (124, 'Jonny')
VALUES (125, 'Sally')
SELECT * FROM @blah
Me estoy poniendo Incorrect syntax near the keyword 'VALUES'.
sql-server
tsql
sql-server-2005
insert
Timothy Khouri
fuente
fuente
INSERT INTO @blah (ID, Name) VALUES (123, 'Timmy'), (124, 'Jonny'), (125, 'Sally')
"VALORES" solo aparece una vez y necesitas comas entre los conjuntos.Respuestas:
Para SQL Server 2008, puede hacerlo en una cláusula VALUES exactamente según la declaración en su pregunta (solo necesita agregar una coma para separar cada declaración de valores) ...
fuente
INSERT table (columnlist)
select
, crea un conjunto con columnas y filas, y al diseñar estas filas se puedeninsert
incorporar a otra tabla con la misma cantidad de columnas. Incluso puede usar una mezcla de literales y valores. Por ejemplo, usarinsert
withselect 'A', ID from ATable
insertaría 'A' en la primera columna cada vez y el valor de la columna ID de la fila correspondiente de ATable en la segunda columna.Su sintaxis casi funciona en SQL Server 2008 (pero no en SQL Server 2005 1 ):
1 Cuando se respondió la pregunta, no se hizo evidente que la pregunta se refería a SQL Server 2005. Dejo esta respuesta aquí, ya que creo que aún es relevante.
fuente
Si sus datos ya están en su base de datos, puede hacer:
Si necesita codificar los datos, SQL 2008 y versiones posteriores le permiten hacer lo siguiente ...
fuente
Usando la
INSERT INTO ... VALUES
sintaxis como en la respuesta de Daniel Vassallo hay una limitación molesta:La forma más fácil de omitir esta limitación es usar una tabla derivada como:
LiveDemo
Esto funcionará a partir de SQL Server 2008+
fuente
C. Specifying multiple values as a derived table in a FROM clause
Podrías hacer esto (feo pero funciona):
fuente
Esto logrará lo que estás preguntando:
Para futuros desarrolladores, también puede insertar desde otra tabla :
O incluso de varias tablas :
fuente
Puedes usar una unión:
fuente
Esto parece correcto para SQL Server 2008. Para SS2005 y anteriores, debe repetir la instrucción VALUES.
EDITAR :: Mi mal. Debe repetir el 'INSERTAR EN' para cada fila en SS2005.
fuente
Sería más fácil usar XML en SQL Server para insertar varias filas; de lo contrario, sería muy tedioso.
Vea el artículo completo con explicaciones de código aquí http://www.cyberminds.co.uk/blog/articles/how-to-insert-multiple-rows-in-sql-server.aspx
Copie el siguiente código en el servidor SQL para ver una muestra.
fuente
O PUEDE USAR OTRA MANERA
fuente
He estado usando lo siguiente:
Agregará diez filas con GUID únicos para ID y Nombre.
Nota: no finalice la última línea (GO 10) con ';' porque arrojará un error: se produjo un error de secuencia de comandos fatal. Se encontró una sintaxis incorrecta al analizar GO.
fuente
En correspondencia con INSERT (Transact-SQL) (SQL Server 2005) no puede omitir
INSERT INTO dbo.Blah
y debe especificarlo cada vez o usar otra sintaxis / enfoque,fuente
Esto funciona muy rápido y eficiente en SQL. Supongamos que tienes tabla
Sample with 4 column a,b,c,d where a,b,d are int and c column is Varchar(50)
.Por lo tanto, no puede insertar múltiples registros en esta tabla utilizando la siguiente consulta sin repetir la instrucción de inserción,
También con C # usando
SqlBulkCopy bulkcopy = new SqlBulkCopy(con)
Puedes insertar 10 filas a la vez
fuente
En una inserción multitarea, inserta filas calculadas derivadas de las filas devueltas de la evaluación de una subconsulta en una o más tablas.
INSERTAR TODO incondicionalmente : - Para agregar varias filas a una tabla a la vez, utilice la siguiente forma de la instrucción INSERTAR:
Especifique ALL seguido de múltiples insert_into_clauses para realizar una inserción multitarea incondicional. Oracle Database ejecuta cada insert_into_clause una vez para cada fila devuelta por la subconsulta.
Consulta de inserción de fila única
fuente
Otros aquí han sugerido un par de sintaxis de registros múltiples. Explicando eso, sugiero que primero inserte en una tabla temporal e inserte su tabla principal desde allí.
La razón de esto es que cargar los datos de una consulta puede llevar más tiempo, y puede terminar bloqueando la tabla o las páginas más de lo necesario, lo que ralentiza otras consultas que se ejecutan en esa tabla.
Además, sus ID probablemente deberían ser de identidad (1,1) y probablemente no debería insertarlas, en la gran mayoría de las circunstancias. Deje que SQL decida eso por usted.
fuente