एक SQL सर्वर तालिका से दूसरी पंक्ति में एक पंक्ति की नकल कैसे करें


91

मेरे पास दो समान टेबल हैं और तालिका से दूसरे तक पंक्तियों की प्रतिलिपि बनाने की आवश्यकता है। उसे करने का सबसे अच्छा तरीका कौन सा है? (मुझे प्रोग्रामिक रूप से बस कुछ पंक्तियों को कॉपी करने की आवश्यकता है, मुझे बल्क कॉपी उपयोगिता का उपयोग करने की आवश्यकता नहीं है)।

जवाबों:


120

जब तक कोई पहचान स्तंभ नहीं हैं तब तक आप बस कर सकते हैं

INSERT INTO TableNew
SELECT * FROM TableOld
WHERE [Conditions]

23
इस सिंटैक्स के साथ सावधान रहें क्योंकि यह काम नहीं करेगा यदि टेबल 2 में एक पहचान कॉलम है और यह भविष्य में टूट जाएगा यदि टेबल 1 कभी भी टेबल 2 को सिंक में बदले बिना बदल जाता है (मुझे पहले जला दिया)। यह समाधान आपके मामले के लिए एकदम सही हो सकता है, बस इन विचारों के बारे में पता होना चाहिए।
माइकल हरेन

11
आप उस तालिका पर पहचान कॉलम को अस्थायी रूप से अक्षम करने के लिए SET IDENTITY_INSERT < table > ON(और SET IDENTITY_INSERT < table > OFF) का उपयोग कर सकते हैं जिसे आप सम्मिलित करना चाहते हैं। मेरे लिए काम कर रहा था कि मैं डेटासेट के बीच में कुछ गुम रिकॉर्ड को बहाल करने की कोशिश करूँ।
निक डेब

1
क्या होगा यदि तालिका 1 में प्राथमिक कुंजी एक विदेशी कुंजी के रूप में तालिका 2 में मौजूद है? मेरे पास एक ही बात है, और मुझे नहीं पता कि क्या करना है .. तालिका 2 में विदेशी कुंजी-कुंजी "Technology_idTechnology" के रूप में और तालिका 1 में, यह "idTechnology" के रूप में है, मैं तालिका 1 की सभी प्रविष्टियों को कॉपी करना चाहता हूं तालिका 2, जब आइडेंटेकोलॉजी दोनों तालिकाओं में मेल खाती है ..
ZelelB

71

वैकल्पिक वाक्यविन्यास:

INSERT tbl (Col1, Col2, ..., ColN)
  SELECT Col1, Col2, ..., ColN
  FROM Tbl2
  WHERE ...

चुनिंदा क्वेरी (निश्चित रूप से) में अभिव्यक्ति, केस स्टेटमेंट, कॉन्स्टेंट / लिटरल आदि शामिल हो सकते हैं।


2
यह बहुत अच्छा है जब तालिकाओं में थोड़ा अंतर होता है। मैंने अपनी दूसरी तालिका में कुछ अतिरिक्त स्तंभ दिए हैं और स्वीकृत उत्तर MSSQL के साथ काम नहीं करता है क्योंकि उन्हें समान होने की आवश्यकता है।
टोनी एम

39

जरेट का जवाब एक नई तालिका बनाता है।

स्कॉट का जवाब उसी संरचना के साथ मौजूदा तालिका में सम्मिलित होता है।

आप अलग संरचना के साथ तालिका में भी सम्मिलित कर सकते हैं:

INSERT Table2
(columnX, columnY)
SELECT column1, column2 FROM Table1
WHERE [Conditions]

6
@ScottStonehouse: यदि आप इस उत्तर में अन्य सभी उत्तर एकत्र करते हैं जैसे आपने किया है, लेकिन कोड के साथ (इसे व्यापक बनाते हुए), तो आप निश्चित रूप से सर्वश्रेष्ठ उत्तर बन जाएंगे।
माइकल हरेन

6
INSERT INTO DestTable
SELECT * FROM SourceTable
WHERE ... 

SQL सर्वर में काम करता है


2
यह केवल तभी काम करता है जब DestTable मौजूद नहीं है। यदि इस क्वेरी से पहले DestTable बनाया जाता है, तो आपको एक त्रुटि मिलेगी।
एक वेब-डेवलपर

2
वास्तव में यह विफल रहता है यदि गंतव्य तालिका मौजूद नहीं है। यदि मौजूदा DestTable खाली नहीं है, तो यह त्रुटियों का कारण हो सकता है।
किन्नू

5
SELECT * INTO < new_table > FROM < existing_table > WHERE < clause >

1
क्या ऐसा करने का कोई तरीका है यदि यह दो तालिकाएँ sql-server में अलग-अलग डेटाबेस में हैं।
नरेश

9
ज़रूर! बस पूरी तरह से योग्य डेटाबेस। [servername]। [स्कीमा]। [तालिका]। उदाहरण के लिएSELECT * INTO [SQLTEST].[dbo].[EMPLOYEES] FROM [SQLPROD].[dbo].[EMPLOYEES]
जरेट मेयर

4
यह एक नई तालिका बनाता है, जो ओपी के लिए नहीं पूछ रहा है।
कॉनरेड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.