SQL Server 2005: Вставьте несколько строк с единым запросом

Это должно быть довольно простым вопросом, но я не смог найти основательный ответ онлайн. Я пытаюсь вставить несколько строк в ту же таблицу, но только с одним оператором. Самое популярное, которое я видел онлайн, следующее, но я считал, что это только работает с SQL Server 2008:

INSERT INTO Table (Name, Location) VALUES
('Name1', 'Location1'),
('Name2', 'Location2'),
('Name3', 'Location3'), etc...

Я предпочел бы этот метод, если он будет работать с SQL Server 2005, но я не думаю, что он будет. Другая опция, от того, что я считал, имеет отношение к ALL's ОБЪЕДИНЕНИЯ после операторов SELECT после ВСТАВКИ, которая кажется неуклюжей. Кто-либо знает наверняка, что лучший синтаксис делает это в 2005?

Спасибо.

16
задан MegaMatt 17 July 2010 в 17:14
поделиться

4 ответа

Да. Вы должны использовать UNION ALLы в SQL Server 2005 для вставки нескольких строк в SQL-сценарий в одном операторе.

INSERT INTO Table 
  (Name, Location) 
SELECT 'Name1', 'Location1' 
UNION ALL
SELECT 'Name2', 'Location2'
UNION ALL
SELECT 'Name3', 'Location3' 

Другая основная альтернатива - повторять оператор Insert несколько раз, что еще более многословно. В этом последнем случае необходимо использовать явные транзакции, чтобы избежать накладных расходов на множество отдельных фиксаций (и, конечно, по причинам атомарности)

Если вам нужно вставить много строк, вы можете использовать BULK INSERT, чтобы загрузить их все из файла с разделителями в одном операторе.

Наконец, если данные уже находятся в базе данных, которые вы создаете сценарий (возможно, для развертывания на другом сервере), в SSMS Tools Pack есть функция "Generate Insert Statements", которая может генерировать эти утверждения для вас.

22
ответ дан 30 November 2019 в 17:27
поделиться

Вы должны использовать union all в sql server 2005. Если честно, это так неуклюже и уродливо, на вашем месте я бы просто использовал несколько вставок . Оберните их в одну транзакцию, и в итоге получится то же самое.

4
ответ дан 30 November 2019 в 17:27
поделиться

Как уже говорили другие, ключ здесь UNION ALL . Для меня использование CTE делает вещи немного чище, например.

WITH NewStuff (Name, Location)
     AS
     (
      SELECT 'Name1', 'Location1' UNION ALL
      SELECT 'Name2', 'Location2' UNION ALL
      SELECT 'Name3', 'Location3' 
     )
INSERT INTO Stuff (Name, Location) 
SELECT Name, Location
  FROM NewStuff; 
5
ответ дан 30 November 2019 в 17:27
поделиться

Да, это ваши единственные варианты, если вы не вставляете много данных и не хотите изучить BULK INSERT

INSERT INTO Table (Name, Location)
SELECT 'Name1', 'Location1' UNION ALL
SELECT 'Name2', 'Location2' UNION ALL
SELECT 'Name3', 'Location3' 
1
ответ дан 30 November 2019 в 17:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: