sql server - বিবৃতির অংশটি "INSERT IN DBO.Blah" পুনরাবৃত্তি না করে আমি কীভাবে একাধিক সারি ঢোকাতে পারি?




sql-server tsql (9)

আপনার তথ্য ইতিমধ্যে আপনার ডাটাবেসের মধ্যে যদি আপনি করতে পারেন:

INSERT INTO MyTable(ID, Name)
SELECT ID, NAME FROM OtherTable

যদি আপনার হার্ডড্রাইভ ডেটা কোডের প্রয়োজন হয় তবে SQL 2008 এবং পরবর্তী সংস্করণগুলি আপনাকে নিম্নলিখিতগুলি করতে দেয় ...

INSERT INTO MyTable (Name, ID)
VALUES ('First',1),
('Second',2),
('Third',3),
('Fourth',4),
('Fifth',5)

আমি জানি যে আমি বহু বছর আগে এটি করেছি, কিন্তু সিনট্যাক্সটি মনে রাখতে পারছি না, এবং "প্রচুর আমদানি" সম্পর্কে নিবন্ধগুলি টন এবং টনগুলি টেনে আনতে আমি এটি কোথাও খুঁজে পাচ্ছি না।

এখানে আমি যা করতে চাই তা হল, কিন্তু সিনট্যাক্স সঠিক নয় ... দয়া করে, যে কেউ আগে এটি করেছে, আমাকে সাহায্য করুন :)

INSERT INTO dbo.MyTable (ID, Name)
VALUES (123, 'Timmy'),
    (124, 'Jonny'),
    (125, 'Sally')

আমি জানি যে এটি সঠিক সিনট্যাক্সের কাছাকাছি। আমার হয়তো সেখানে "বাল্ক" শব্দটির প্রয়োজন হতে পারে, অথবা কিছু, আমি মনে করতে পারছি না। কোন ধারণা?

আমি একটি SQL সার্ভার 2005 ডাটাবেসের জন্য এই প্রয়োজন। আমি এই কোডটি চেষ্টা করেছি, কোন লাভ নেই:

DECLARE @blah TABLE
(
    ID INT NOT NULL PRIMARY KEY,
    Name VARCHAR(100) NOT NULL
)

INSERT INTO @blah (ID, Name)
    VALUES (123, 'Timmy')
    VALUES (124, 'Jonny')
    VALUES (125, 'Sally')

SELECT * FROM @blah

আমি Incorrect syntax near the keyword 'VALUES'. পাচ্ছি Incorrect syntax near the keyword 'VALUES'.


আপনার সিনট্যাক্স প্রায় এসকিউএল সার্ভার 2008 (কিন্তু এসকিউএল সার্ভার 2005 1 ) মধ্যে কাজ করে না:

CREATE TABLE MyTable (id int, name char(10));

INSERT INTO MyTable (id, name) VALUES (1, 'Bob'), (2, 'Peter'), (3, 'Joe');

SELECT * FROM MyTable;

id |  name
---+---------
1  |  Bob       
2  |  Peter     
3  |  Joe       

1 প্রশ্নটি উত্তর দেওয়ার সময়, এটি স্পষ্টভাবে প্রকাশ করা হয়নি যে প্রশ্নটি SQL সার্ভার 2005 এর উল্লেখ করা হয়েছে। আমি এই উত্তরটি এখানে রেখে যাচ্ছি, যেহেতু আমি বিশ্বাস করি এটি এখনও প্রাসঙ্গিক।


আপনি এটা করতে পারেন (কুৎসিত কিন্তু এটি কাজ করে):

INSERT INTO dbo.MyTable (ID, Name) 
select * from
(
 select 123, 'Timmy'
  union all
 select 124, 'Jonny' 
  union all
 select 125, 'Sally'
 ...
) x

আপনি যা জিজ্ঞাসা করছেন সেটি এই অর্জন করবে:

INSERT INTO table1 (ID, Name)
    VALUES (123, 'Timmy'), 
           (124, 'Jonny'), 
           (125, 'Sally');

ভবিষ্যতে ডেভেলপারদের জন্য, আপনি অন্য টেবিলের থেকেও সন্নিবেশ করতে পারেন:

INSERT INTO table1 (ID, Name)
    SELECT 
         ID, 
         Name 
    FROM table2

অথবা এমনকি একাধিক টেবিল থেকে :

INSERT INTO table1 (column2, column3)
    SELECT 
         t2.column, 
         t3.column
    FROM table2 t2
         INNER JOIN table3 t3
         ON t2.ID = t3.ID

একাধিক সারি সন্নিবেশ করাতে এটি SQL সার্ভারে XML ব্যবহার করা আরও সহজ হবে তবে এটি খুব ক্লান্তিকর হয়ে উঠবে।

এখানে কোড ব্যাখ্যা সহ পুরো নিবন্ধটি দেখুন http://www.cyberminds.co.uk/blog/articles/how-to-insert-multiple-rows-in-sql-server.aspx

নমুনা দেখতে এসকিউএল সার্ভারে নিম্নলিখিত কোড অনুলিপি করুন।

declare @test nvarchar(max)

set @test = '<topic><dialog id="1" answerId="41">
        <comment>comment 1</comment>
        </dialog>
    <dialog id="2" answerId="42" >
    <comment>comment 2</comment>
        </dialog>
    <dialog id="3" answerId="43" >
    <comment>comment 3</comment>
        </dialog>
    </topic>'

declare @testxml xml
set @testxml = cast(@test as xml)
declare @answerTemp Table(dialogid int, answerid int, comment varchar(1000))

insert @answerTemp
SELECT  ParamValues.ID.value('@id','int') ,
ParamValues.ID.value('@answerId','int') ,
ParamValues.ID.value('(comment)[1]','VARCHAR(1000)')
FROM @testxml.nodes('topic/dialog') as ParamValues(ID)

এটি SQL সার্ভার 2008 এর জন্য ঠিক দেখাচ্ছে। SS2005 এবং এর আগে, আপনাকে VALUES বিবৃতিটি পুনরাবৃত্তি করতে হবে।

INSERT INTO dbo.MyTable (ID, Name)  
VALUES (123, 'Timmy')  
VALUES (124, 'Jonny')   
VALUES (125, 'Sally')  

সম্পাদন :: আমার খারাপ। SS2005 এর প্রতিটি সারির জন্য আপনাকে 'INSERT INTO' পুনরাবৃত্তি করতে হবে।

INSERT INTO dbo.MyTable (ID, Name)  
VALUES (123, 'Timmy')  
INSERT INTO dbo.MyTable (ID, Name)  
VALUES (124, 'Jonny')   
INSERT INTO dbo.MyTable (ID, Name)  
VALUES (125, 'Sally')  

INSERT ( INSERT INTO dbo.Blah -এসকিউএল) (এসকিউএল সার্ভার 2005) এর সাথে সম্পর্কিত আপনি INSERT INTO dbo.Blah করতে পারবেন না এবং এটি প্রতিবার নির্দিষ্ট করতে বা অন্য সিনট্যাক্স / পদ্ধতির ব্যবহার করতে হবে,


INSERT INTO ... VALUES ব্যবহার করে INSERT INTO ... VALUES ড্যানিয়েল ভাসাল্লোর উত্তরের মত মূল্যবান সিনট্যাক্স একটি বিরক্তিকর সীমাবদ্ধতা রয়েছে:

MSDN থেকে

VALUES তালিকায় সরাসরি সারি সন্নিবেশ করে তৈরি করা সর্বোচ্চ সংখ্যক সারি 1000

এই সীমাবদ্ধতাটি পরিত্যাগ করার সবচেয়ে সহজ উপায় হল উদ্ভূত টেবিলটি ব্যবহার করা:

INSERT INTO dbo.Mytable(ID, Name)
SELECT ID, Name 
FROM (
   VALUES (1, 'a'),
          (2, 'b'),
          --...
          -- more than 1000 rows
)sub (ID, Name);

LiveDemo

এই SQL সার্ভার 2008 + থেকে শুরু কাজ করবে


USE YourDB
GO
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

অথবা আপনি অন্য উপায় ব্যবহার করতে পারেন

INSERT INTO MyTable (FirstCol, SecondCol)
VALUES 
('First',1),
('Second',2),
('Third',3),
('Fourth',4),
('Fifth',5)







insert