এসকিউএল সার্ভার বিদ্যমান সারণীতে নির্বাচন করুন


384

আমি একটি টেবিল থেকে কিছু ক্ষেত্র নির্বাচন করার চেষ্টা করছি এবং একটি সঞ্চিত পদ্ধতি থেকে একটি বিদ্যমান টেবিলের মধ্যে এগুলি .োকানোর চেষ্টা করছি। এখানে আমি চেষ্টা করছি:

SELECT col1, col2
INTO dbo.TableTwo 
FROM dbo.TableOne 
WHERE col3 LIKE @search_key

আমি মনে করি SELECT ... INTO ...অস্থায়ী টেবিলগুলির জন্য তাই আমি dbo.TableTwoইতিমধ্যে বিদ্যমান একটি ত্রুটি পেয়েছি ।

আমি কীভাবে এর dbo.TableOneমধ্যে একাধিক সারি sertোকাতে পারি dbo.TableTwo?


29
যেহেতু আপনি ইতিমধ্যে একটি উত্তর গ্রহণ করেছেন, আমি কেবল একটি নোট সরবরাহ করতে চেয়েছিলাম: "অস্থায়ী টেবিলগুলির জন্য নয়" তে নির্বাচন করুন, এটি ক্যোয়ারীর নির্বাচিত অংশের কাঠামো (এবং ডেটা) এর উপর ভিত্তি করে একটি নতুন টেবিল তৈরি করার জন্য । টেবিল এক্সের জন্য, আপনি কেবলমাত্র সর্বদা এটিতে সর্বদা 1 বার নির্বাচন করতে পারেন * এর পরে আপনার যে কোনও ডেটা সংযোজন করতে ইনসার্ট ইনট ব্যবহার করতে হবে use * যদি টেবিলটি ইতিমধ্যে বিদ্যমান থাকে, তবে শূন্য বার। আপনি অবশ্যই টেবিলটি ড্রপ না করে এটি অবশ্যই।
গোলাপী ফ্লয়েডএক্স 33

8
তবে মনে রাখবেন যে সিলেক্ট ইন্টো ইনডেক্স / প্রাথমিক কী / বিদেশী কী বাধাগুলি অনুলিপি করে না, তাই এটি আপনাকে একটি আন-আনডেক্সড হিপ-ও-ডেটা দিয়ে যায়। এটি দ্রুত ডেভ কাজের জন্য দরকারী, তবে আসল উত্পাদন টেবিল যুক্ত / সরানোর উপায় নয়।
গ্রাহাম গ্রিফিথস

কেবল ড্রপ টেবিল ট্যাবলেটও এই বিবৃতিটি চালান; এবং প্রশ্নের উপরে রান করুন। অস্থায়ী টেবিলের জন্য নয় ... নির্বাচন করুন।
শিওয়াঙ্গিনী

উত্তর:


637

SELECT ... INTO ... কেবলমাত্র INTO ক্লজে বর্ণিত সারণীটি উপস্থিত না থাকলে কাজ করে - অন্যথায়, আপনাকে ব্যবহার করতে হবে:

INSERT INTO dbo.TABLETWO
SELECT col1, col2
  FROM dbo.TABLEONE
 WHERE col3 LIKE @search_key

এটি ধরে নিয়েছে যে ডিবোতে কেবল দুটি কলাম রয়েছে AB টেবিলটো - আপনার অন্যথায় কলামগুলি নির্দিষ্ট করা দরকার:

INSERT INTO dbo.TABLETWO
  (col1, col2)
SELECT col1, col2
  FROM dbo.TABLEONE
 WHERE col3 LIKE @search_key

52
সবসময় কলামগুলি সেখানে থাকুক বা না থাকুক তা নির্দিষ্ট করে দেওয়া সেরা অনুশীলন। এটি যখন কেউ কলাম যুক্ত করে তখন জিনিসগুলি ভাঙ্গা থেকে রোধ করতে সহায়তা করবে।
এইচএলজিইএম

1
হুম, ধারাটিতে SELECT... INTO...বর্ণিত সারণী INTOইতিমধ্যে উপস্থিত না থাকলে বিবৃতিটি কাজ করছে বলে মনে হচ্ছে না। আমি একটি "অঘোষিত ভেরিয়েবল" ত্রুটি পাচ্ছি। যদিও এই সমস্যাটি কেবল মাইএসকিউএল-এর জন্য। দ্য CREATE TABLE ... LIKE .. worked;
LazerSharks

1
@ জেনুয়ে সিলেক্ট ... INTO ... কেবলমাত্র বিদ্যমান টেবিল থাকলে কাজ করে। যদি কোনও বিদ্যমান সারণী না থাকে তবে মূল পোস্টারের ফর্ম্যাটটি ব্যবহার করুন (এটি একটি নতুন টেবিল তৈরি
করবে

6
@ আপনি কি বলেছিলেন তার বিপরীত মানে? ...SELECT ... INTO ... এর জন্য একটি বিদ্যমান নেই এমন সারণী নির্দিষ্ট করতে হবে, যখন S INSERT INTO ... an একটি বিদ্যমান সারণী নির্দিষ্ট করতে হবে।
আন্দ্রে সি। অ্যান্ডারসন

5
আমি আশা করি যে আমি যতবার ফিরে পরীক্ষা করে দেখি এবং এই উত্তরটি ব্যবহার করেছিলাম তার জন্য কোনও পাল্টা উপস্থিত ছিল!
এমটিএডমিন

13

এক টেবিল থেকে অন্য টেবিলে তথ্য সন্নিবেশ করানোর দুটি ভিন্ন উপায় রয়েছে।

বিদ্যমান সারণীর জন্য - নির্বাচন করুন অন্তর্ভুক্ত করুন

এই পদ্ধতিটি ব্যবহৃত হয় যখন টেবিলটি ইতিমধ্যে ডাটাবেসে তৈরি করা হয়েছিল এবং অন্য টেবিল থেকে এই টেবিলটিতে ডেটা toোকানো হবে। যদি সারণি সারণিতে তালিকাভুক্ত কলামগুলি নির্বাচন করুন এবং ক্লজটি একই থাকে তবে তাদের তালিকা দেওয়ার প্রয়োজন নেই। পাঠযোগ্যতা এবং মাপেরযোগ্যতার উদ্দেশ্যে তাদের সর্বদা তালিকাভুক্ত করা ভাল অনুশীলন।

----Create testable
CREATE TABLE TestTable (FirstName VARCHAR(100), LastName VARCHAR(100))
----INSERT INTO TestTable using SELECT
INSERT INTO TestTable (FirstName, LastName)
SELECT FirstName, LastName
FROM Person.Contact
WHERE EmailPromotion = 2
----Verify that Data in TestTable
SELECT FirstName, LastName
FROM TestTable
----Clean Up Database
DROP TABLE TestTable

অ-বিদ্যমান টেবিলের জন্য - নির্বাচন করুন

এই পদ্ধতিটি ব্যবহার করা হয় যখন টেবিলটি আগে তৈরি করা হয় না এবং যখন একটি টেবিল থেকে ডেটা অন্য সারণি থেকে নতুন তৈরি করা টেবিলের মধ্যে সন্নিবেশ করা হয় তখন তৈরি করা দরকার। নতুন টেবিলটি নির্বাচিত কলামগুলির মতো একই ডেটা ধরণের দিয়ে তৈরি করা হয়েছে।

----Create a new table and insert into table using SELECT INSERT
SELECT FirstName, LastName
INTO TestTable
FROM Person.Contact
WHERE EmailPromotion = 2
----Verify that Data in TestTable
SELECT FirstName, LastName
FROM TestTable
----Clean Up Database
DROP TABLE TestTable

রেফ 1 1


3

এটি নীচে দেওয়া হিসাবে কাজ করবে:

insert into Gengl_Del Select Tdate,DocNo,Book,GlCode,OpGlcode,Amt,Narration 
from Gengl where BOOK='" & lblBook.Caption & "' AND DocNO=" & txtVno.Text & ""

5
-1 প্রতিরোধ করতে +1 এবং অন্যান্য ব্যবহারকারীদের দ্বারা ব্যবহার করা যেতে পারে বা রেফারেন্স করা যেতে পারে এমন ধারণা দেওয়ার চেষ্টা করার জন্য। @ মারকসোউল এসকিউএল ইনজেকশনের অধিকারী তবে একাডেমিক উদ্দেশ্যে অন্যান্য লোকেরা এই জাতীয় পদ্ধতিতে চেষ্টা করতে পারেন।
আলবার্ট লর

1
বেশিরভাগ টেবিলের একটি স্বয়ংবৃদ্ধি ক্ষেত্র থাকে, যা সন্নিবেশ করা যায় না। সুতরাং SELECT *কাজ করবে না। এটি একটি ভাল উপায়, ধন্যবাদ!
এমজেএইচ

2
@ ব্যবহারকারীর এটি কখনই করা উচিত নয় এবং এভাবে কখনও চেষ্টা করা উচিত নয়। প্রথম থেকেই এটি করার সঠিক উপায় দেখাচ্ছে এই উত্তরটি সম্পাদনা করা আরও অনেক কার্যকর হবে এবং যদি কেউ জিজ্ঞাসা করেন, "প্রশ্ন চিহ্ন / চিহ্নগুলিতে কী আছে?" আপনি কেবল উত্তর দিন, "এগুলি প্যারামিটারাইজড কোয়েরিতে (সুযোগের বাইরে) ব্যবহারের জন্য প্যারামিটার চিহ্নিতকারী" এবং সেখান থেকে এটিকে বের করে আনুন।
ম্যাট বোরজা

2
select *
into existing table database..existingtable
from database..othertables....

যদি আপনি select * into tablename from other tablenamesইতিমধ্যে ব্যবহার করেছেন , পরের বার, যোগ করার জন্য, আপনি বলেছেনselect * into existing table tablename from other tablenames


2
পিএস পরীক্ষিত SYBASE এএসই 15.5
Verena_Techie

10
ওপি এমএস এসকিউএল চাইছে।
গ্র্যান্ডমাস্টারফ্লুশ

1

গন্তব্য সারণী যদি বিদ্যমান থাকে তবে আপনি কলামের নাম নির্দিষ্ট করতে চান না:

DECLARE @COLUMN_LIST NVARCHAR(MAX);
DECLARE @SQL_INSERT NVARCHAR(MAX);

SET @COLUMN_LIST = (SELECT DISTINCT
    SUBSTRING(
        (
            SELECT ', table1.' + SYSCOL1.name  AS [text()]
            FROM sys.columns SYSCOL1
            WHERE SYSCOL1.object_id = SYSCOL2.object_id and SYSCOL1.is_identity <> 1
            ORDER BY SYSCOL1.object_id
            FOR XML PATH ('')
        ), 2, 1000)
FROM
    sys.columns SYSCOL2
WHERE
    SYSCOL2.object_id = object_id('dbo.TableOne') )

SET @SQL_INSERT =  'INSERT INTO dbo.TableTwo SELECT ' + @COLUMN_LIST + ' FROM dbo.TableOne table1 WHERE col3 LIKE ' + @search_key
EXEC sp_executesql @SQL_INSERT
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.