2010-03-17 20 views
69

kullanarak birden çok değer ekleme SQL Server 2005'te, bir tabloya neden birden çok alan ekleyemediğimi anlamaya çalışıyorum. bir kayıt ekler aşağıdaki sorgu, çalışıyor:INSERT INTO (SQL Server 2005)

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

Ancak, birden fazla değer belirtir aşağıdaki sorgu, başarısız:

Msg 102, Level 15, State 1, Line 5 
Incorrect syntax near ','. 
:
INSERT INTO [MyDB].[dbo].[MyTable] 
      ([FieldID] 
      ,[Description]) 
    VALUES 
      (1000,N'test'),(1001,N'test2') 

bu mesaj çıktı

SQL Sever Management Studio'daki INSERT için yardıma baktığımda, örneklerinden biri kullandığım "Değerler" sözdizimini (parantez içinde değerler grubuyla ve virgülle ayrılmış olarak) kullanarak gösterdi. SQL Server Management Studio'da bulduğum yardım belgeleri, SQL Server 2008 için olduğu gibi görünüyor, bu yüzden eklentinin çalışmadığı nedeni olabilir. Her iki durumda da, neden işe yaramadığını anlayamıyorum.

+0

olmadan denedim eğer sadece Meraklı '' değeri setleri arasında? Bu yazının oldukça eski olduğunu biliyorum, ama meraklıyım. Bunu bir cevap ararken buldum ve SQL bilgimin çoğu son birkaç yıl içinde. – Malachi

+0

olası bir kopyası [İfadenin bir kısmı INSERT INTO dbo.Blah'ı tekrarlamadan birden fazla satır nasıl ekleyebilirim?] (Http://stackoverflow.com/questions/2624713/how-do-i-insert-multiple- satırlar-yinelenmeyen-ekleme-dbo-blah-parçası) –

cevap

94

kullandığınız sözdizimi 2008, SQL Server yenidir:

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

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

Bir diğer seçenek kullanmaktır:

SQL Server 2005 için
INSERT INTO [MyDB].[dbo].[MyTable] 
     ([FieldID] 
     ,[Description]) 
VALUES 
     (1000,N'test'),(1001,N'test2') 

, birden INSERT ifadeleri kullanmak zorunda olacak UNION ALL:

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

Açıklama için teşekkürler. Select/Union harika çalıştı. –

+0

Bunun için çok teşekkür ederim. SQL 2008'de geliştirdiğimiz test sistemi için SQL 2005'i kullandık. Bazı geliştiriciler bu sözdiziminin yalnızca SQL 2005'te mevcut olduğunun farkında değillerdi. – aheil

+0

@Downvoter - Yorum yapmak ister misiniz? – Oded

9

Aşağıdaki sözdizimini de kullanabilirsiniz: -

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 

SQL Server 2008,2012,2014 yılında

0

here itibaren tek bir SQL INSERT deyimi kullanarak birden fazla satır ekleyebilir.

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

bir başka yolu

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