2010-03-17 11 views
69

W SQL Server 2005 próbuję dowiedzieć się, dlaczego nie mogę wstawić wielu pól do tabeli. Następująca kwerenda, która wstawia jeden rekord, działa bez zarzutu:Wstawianie wielu wartości za pomocą INSERT INTO (SQL Server 2005)

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

Jednak następujące kwerendy, która określa więcej niż jedną wartość, nie:

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

otrzymuję komunikat:

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

Kiedy przejrzałem pomoc dla INSERT w SQL Sever Management Studio, jeden z ich przykładów pokazał użycie składni "Values", której użyłem (z grupami wartości w nawiasach i oddzielonymi przecinkami). Dokumentacja pomocnicza znaleziona w SQL Server Management Studio wygląda tak, jak na SQL Server 2008, więc może to jest przyczyną tego, że wstawka nie działa. Tak czy inaczej, nie mogę zrozumieć, dlaczego to nie zadziała.

+0

tylko ciekaw czy próbowałeś go bez '' pomiędzy zestawami wartości? Wiem, że ten post jest dość stary, ale jestem ciekawy. Znalazłem to, gdy szukałem odpowiedzi, a większość mojej wiedzy SQL jest w ciągu ostatnich kilku lat. – Malachi

+0

możliwy duplikat [Jak wstawić wiele wierszy BEZ powtarzania części "INSERT INTO dbo.Blah" instrukcji?] (Http://stackoverflow.com/questions/2624713/how-do-i-insert-multiple- wiersze bez powtarzania wstawki do części dbo-blah) –

Odpowiedz

94

Składnia używasz jest nowy w SQL Server 2008:

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

Dla SQL Server 2005, trzeba będzie użyć wielu INSERT oświadczenia:

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

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

Inną opcją jest użycie UNION ALL:

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

Dzięki za wyjaśnienie. Select/Union działał świetnie. –

+0

Dziękuję bardzo za to. Użyliśmy SQL 2005 dla systemu testowego, podczas gdy my rozwijaliśmy się na SQL 2008. Niektórzy programiści nie zdawali sobie sprawy z tego, że ta składnia jest dostępna tylko w SQL 2005. – aheil

+0

@ Dvvvoter - prosimy o komentarz? – Oded

9

Można również użyć następującej składni: -

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 

Od here

0

W SQL Server 2008,2012,2014 można wstawić wiele wierszy przy użyciu pojedynczej instrukcji SQL INSERT.

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

Innym sposobem

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 
Powiązane problemy