Проблема вставки нескольких значений с использованием SQL Server 2000 - PullRequest
5 голосов
/ 21 марта 2011

У меня есть следующий оператор вставки, который отлично работает на одной системе, работающей под управлением SQL Server 2008, но я пытался сделать то же самое в системе под управлением 2000, и она выдает ошибку ...

Легко ли это исправить, поскольку мне нужно вставить более 3000 записей, и я не хочу делать их все по одному!

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

Ответы [ 4 ]

9 голосов
/ 21 марта 2011

Используя SQL Server 2000, есть два способа сделать это -

один -

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');

Второй способ - использовать UNION ALL-

INSERT INTO uk_postcodes (outcode, lat, lng) 
SELECT 'AB12', '57.098381', '-2.172400'
UNION ALL 
SELECT 'AB13', '57.108', '-2.237'
4 голосов
/ 21 марта 2011

С небольшой заменой строки вы сможете конвертировать скрипт в следующее, которое должно работать:

INSERT INTO uk_postcodes (outcode, lat, lng) 
select 'AB12', '57.098381', '-2.172400' union select 'AB13', '57.108', '-2.237'
1 голос
/ 21 марта 2011

Оба ответа дать будут работать. Для получения дополнительной информации:

http://en.wikipedia.org/wiki/Insert_(SQL) В ANSI SQL-92 добавлен синтаксис вставки нескольких записей, разделяющий VALUES через запятую, что вы и пытаетесь использовать. Специально для SQL-сервера, поддержка этого синтаксиса была добавлена ​​с версии 2008.

Для скорости есть некоторые проблемы с чрезмерно длинными строками, поэтому используйте

SELECT .. UNION
SELECT ..

сформируйте, но разбейте и запустите другую INSERT после примерно 100 или 1000 записей.

* конструкторы табличных значений не ограничиваются только оператором INSERT. SQL Server 2008 идет еще дальше, позволяя ему определять <derived table>, например

SELECT MAX(Amount)
FROM (
     VALUES (1),(2),(192),(99)
) Tbl(Amount)
0 голосов
/ 21 марта 2011

Предполагая, что вы все ваши данные похожи на это, попробуйте заменить все "), (" на "); INSERT INTO uk_postcodes (outcode, lat, lng) VALUES ("

...