2011-03-21 12 views
5

Tengo la siguiente instrucción de inserción que funciona bien en un sistema que ejecuta SQL Server 2008 pero he intentado lo mismo en un sistema que ejecuta 2000 y da un error ...Problema al insertar múltiples valores usando SQL Server 2000

¿Existe una solución fácil para esto ya que tengo más de 3000 registros para insertar y no quiero tener que hacerlos todos de uno en uno!

INSERT INTO uk_postcodes (outcode, lat, lng) 
VALUES ('AB12', '57.098381', '-2.172400'),('AB13', '57.108', '-2.237') 
+1

La posibilidad de especificar más de una tupla para INSERT es una característica nueva en la versión 2008 - no existe antes de eso. –

Respuesta

8

Usando un servidor SQL 2000, hay dos maneras de hacer esto -

uno es

INSERT INTO uk_postcodes (outcode, lat, lng) 
VALUES ('AB12', '57.098381', '-2.172400'); 
INSERT INTO uk_postcodes (outcode, lat, lng) 
VALUES ('AB13', '57.108', '-2.237'); 

segunda manera es usando UNION ALL

INSERT INTO uk_postcodes (outcode, lat, lng) 
SELECT 'AB12', '57.098381', '-2.172400' 
UNION ALL 
SELECT 'AB13', '57.108', '-2.237' 
+0

Me las arreglé para encontrar y reemplazar con su primera sugerencia ... gracias – Tom

4

Con un trozo de cuerda reemplazando usted será capaz de convertir el guión en los siguientes, que debería funcionar:

INSERT INTO uk_postcodes (outcode, lat, lng) 
select 'AB12', '57.098381', '-2.172400' union select 'AB13', '57.108', '-2.237' 
0

Suponiendo que todos sus datos es como intentar sustituir toda ") , (" con "); INSERT INTO uk_postcodes (outcode, lat, lng) VALUES ("

1

Ambas respuestas dan funcionará. Para obtener más información:

http://en.wikipedia.org/wiki/Insert_(SQL) ANSI SQL-92 agregó la sintaxis de inserción de registros múltiples, separando VALUES usando comas, que es lo que está tratando de usar. Para SQL Server específicamente, se añadió soporte para esta sintaxis desde la versión 2008.

para la velocidad, hay algunos problemas con las cadenas excesivamente largas, por lo que utilizar el formulario

SELECT .. UNION 
SELECT .. 

, pero romper y empezar otro inserto después de unos 100 o 1000 registros.

* los constructores de valores de tabla no están limitados solo a la instrucción INSERTAR. SQL Server 2008 va más allá para permitirle definir un <derived table>, p. Ej.

SELECT MAX(Amount) 
FROM (
    VALUES (1),(2),(192),(99) 
) Tbl(Amount) 
Cuestiones relacionadas