sql-server استعلامات - إدراج صفوف متعددة في استعلام SQL واحد؟




امر دالة (5)

لدي مجموعة متعددة من البيانات لإدراجها مرة واحدة ، لنقل 4 صفوف.

يحتوي الجدول الخاص بي على ثلاثة أعمدة: Person و Id و Office .

INSERT INTO MyTable VALUES ("John", 123, "Lloyds Office");
INSERT INTO MyTable VALUES ("Jane", 124, "Lloyds Office");
INSERT INTO MyTable VALUES ("Billy", 125, "London Office");
INSERT INTO MyTable VALUES ("Miranda", 126, "Bristol Office");

هل يمكنني insert كل الصفوف الأربعة في عبارة SQL statement واحدة؟


Answers

إذا كنت تقوم بإدخالها في جدول واحد ، يمكنك كتابة الاستعلام الخاص بك مثل هذا (ربما فقط في MySQL):

INSERT INTO table1 (First, Last)
VALUES
    ('Fred', 'Smith'),
    ('John', 'Smith'),
    ('Michael', 'Smith'),
    ('Robert', 'Smith');

ملاحظة: هذه الإجابة لـ SQL Server 2005. لـ SQL Server 2008 والإصدارات الأحدث ، توجد أساليب أفضل بكثير كما هو موضح في الإجابات الأخرى.

يمكنك استخدام INSERT مع SELECT UNION ALL :

INSERT INTO MyTable  (FirstCol, SecondCol)
    SELECT  'First' ,1
    UNION ALL
SELECT  'Second' ,2
    UNION ALL
SELECT  'Third' ,3
...

فقط لمجموعات البيانات الصغيرة ، والتي ينبغي أن تكون جيدة للسجلات 4 الخاصة بك.


في SQL Server 2008 ، يمكنك إدراج صفوف متعددة باستخدام عبارة SQL INSERT واحدة.

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

للإشارة إلى هذا لديك إلقاء نظرة على دورة MOC 2778A - كتابة استعلامات SQL في SQL Server 2008.


INSERT التي تستخدم بناء الجملة VALUES يمكنها إدراج صفوف متعددة. للقيام بذلك ، قم بتضمين قوائم متعددة لقيم العمود ، كل منها ضمن أقواس و مفصولة بفواصل.

مثال:

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);

  1. أنا بصدد إنشاء جدول يحتوي على المخطط والبيانات التاليين.
  2. قم بإنشاء إجراء مخزن.
  3. الآن أعرف ما هي نتيجة الإجراء الخاص بي ، لذلك أقوم بإجراء الاستعلام التالي.

    CREATE TABLE [dbo].[tblTestingTree](
        [Id] [int] IDENTITY(1,1) NOT NULL,
        [ParentId] [int] NULL,
        [IsLeft] [bit] NULL,
        [IsRight] [bit] NULL,
    CONSTRAINT [PK_tblTestingTree] PRIMARY KEY CLUSTERED
    (
        [Id] ASC
    ) WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
    ) ON [PRIMARY]
    GO
    SET IDENTITY_INSERT [dbo].[tblTestingTree] ON
    INSERT [dbo].[tblTestingTree] ([Id], [ParentId], [IsLeft], [IsRight]) VALUES (1, NULL, NULL, NULL)
    INSERT [dbo].[tblTestingTree] ([Id], [ParentId], [IsLeft], [IsRight]) VALUES (2, 1, 1, NULL)
    INSERT [dbo].[tblTestingTree] ([Id], [ParentId], [IsLeft], [IsRight]) VALUES (3, 1, NULL, 1)
    INSERT [dbo].[tblTestingTree] ([Id], [ParentId], [IsLeft], [IsRight]) VALUES (4, 2, 1, NULL)
    INSERT [dbo].[tblTestingTree] ([Id], [ParentId], [IsLeft], [IsRight]) VALUES (5, 2, NULL, 1)
    INSERT [dbo].[tblTestingTree] ([Id], [ParentId], [IsLeft], [IsRight]) VALUES (6, 3, 1, NULL)
    INSERT [dbo].[tblTestingTree] ([Id], [ParentId], [IsLeft], [IsRight]) VALUES (7, 3, NULL, 1)
    INSERT [dbo].[tblTestingTree] ([Id], [ParentId], [IsLeft], [IsRight]) VALUES (8, 4, 1, NULL)
    INSERT [dbo].[tblTestingTree] ([Id], [ParentId], [IsLeft], [IsRight]) VALUES (9, 4, NULL, 1)
    INSERT [dbo].[tblTestingTree] ([Id], [ParentId], [IsLeft], [IsRight]) VALUES (10, 5, 1, NULL)
    SET IDENTITY_INSERT [dbo].[tblTestingTree] OFF
    
    create procedure GetDate
    as
    begin
        select Id,ParentId from tblTestingTree
    end
    
    create table tbltemp
    (
        id int,
        ParentId int
    )
    insert into tbltemp
    exec GetDate
    
    select * from tbltemp
    




sql sql-server tsql insert