SQL में किसी तालिका में तालिका के सभी मान सम्मिलित करें


128

मैं एक तालिका के सभी मूल्यों को दूसरे में सम्मिलित करने का प्रयास कर रहा हूं। लेकिन इंसर्ट स्टेटमेंट मानों को स्वीकार करता है, लेकिन मैं चाहूंगा कि इसे शुरुआती_T से एक सेलेक्ट * स्वीकार करें। क्या यह संभव है?

जवाबों:


262

डालने का बयान वास्तव में बस ऐसा करने के लिए एक वाक्यविन्यास है। यदि आप "*" का चयन करने के बजाय कॉलम नाम निर्दिष्ट करते हैं तो यह बहुत आसान है:

INSERT INTO new_table (Foo, Bar, Fizz, Buzz)
SELECT Foo, Bar, Fizz, Buzz
FROM initial_table
-- optionally WHERE ...

मैं इसे बेहतर ढंग से स्पष्ट करूंगा क्योंकि किसी कारण से यह पद कुछ डाउन वोट हो रहा है।

INSERT INTO ... सिलेक्ट से सिंटैक्स तब होता है जब आप जिस तालिका में (ऊपर मेरे उदाहरण में "new_table") सम्मिलित कर रहे हैं वह पहले से मौजूद है। जैसा कि अन्य लोगों ने कहा है, चयन ... INTO सिंटैक्स तब होता है जब आप कमांड के हिस्से के रूप में नई तालिका बनाना चाहते हैं।

आपने यह निर्दिष्ट नहीं किया कि नई तालिका को कमांड के भाग के रूप में बनाने की आवश्यकता है, इसलिए INSERT INTO ... चयन बिंदु ठीक होना चाहिए यदि आपकी गंतव्य तालिका पहले से मौजूद है।


3
Wha--? कोई मुझे एक टिप्पणी छोड़ कर यह बताना चाहता है कि यह पोस्ट डाउन-वोट क्यों उत्पन्न कर रहा है? मुझे ओप्स प्रश्न में कुछ भी दिखाई नहीं देता है जो यह निर्दिष्ट करता है कि क्वेरी के हिस्से के रूप में नई तालिका बनाई जानी चाहिए।
मैट हैमिल्टन

यह कैसे अखंडता की कमी का उल्लंघन करता है? उदाहरण के लिए, यदि कोई विशिष्ट डुप्लिकेट है, तो यह क्वेरी को रोक देता है या केवल उस विशेष प्रविष्टि को छोड़ देता है?
मार्टिन डेल लाइनेस

मेरा मानना ​​है कि यह एक त्रुटि फेंक देगा और लेन-देन को वापस लेगा, जिसका अर्थ है कि कुछ भी कॉपी नहीं किया गया है। हालांकि परीक्षण लायक।
मैट हैमिल्टन

25

इसे इस्तेमाल करे:

INSERT INTO newTable SELECT * FROM initial_Table

2
जब हम पहचान कॉलम रखते हैं तो तारों का उपयोग करते हुए काम नहीं करते हैं
मोहसिन तवोसी محسن واوسی

पहचान के साथ इस परिदृश्य के लिए पहचान मूल्यों को सम्मिलित करने के लिए सबसे पहले SET IDENTITY_INSERT table_name को और अंत में बंद के साथ जोड़ें।
जुआन

13

आप निम्नानुसार एक उप-क्वेरी का उपयोग करके सम्मिलित कर सकते हैं:

INSERT INTO new_table (columns....)
SELECT columns....
FROM initial_table where column=value



4

एक आसान तरीका है जहां आपको कोई भी कोड टाइप नहीं करना है (आदर्श है परीक्षण या एक-बार अपडेट के लिए):

चरण 1

  • एक्सप्लोरर में तालिका पर राइट क्लिक करें और "शीर्ष 100 पंक्तियों को संपादित करें" चुनें;

चरण 2

  • फिर आप अपनी इच्छित पंक्तियों का चयन कर सकते हैं ( Ctrl + Click या Ctrl + A ), और राइट क्लिक करें और कॉपी करें ( नोट : यदि आप " जहां " स्थिति जोड़ना चाहते हैं, तो ग्रिड पर राइट क्लिक करें -> फलक -> SQL अब आप क्वेरी को संपादित कर सकते हैं और WHERE की स्थिति जोड़ सकते हैं, फिर राइट क्लिक करें -> SQL निष्पादित करें, आपकी आवश्यक पंक्तियों का चयन करने के लिए उपलब्ध होगा)

चरण 3

  • लक्ष्य तालिका के लिए चरण 1 का पालन करें।

चरण 4

  • अब ग्रिड के अंत में जाएं और पहली पंक्ति में अंतिम पंक्ति में एक तारांकन (*) होगा (यह पंक्ति अतिरिक्त प्रविष्टि जोड़ने के लिए है)। उस पूरी पंक्ति और फिर PASTE ( Ctrl + V ) का चयन करने के लिए उस पर क्लिक करें । सेल में एक लाल तारांकन हो सकता है (यह दर्शाता है कि यह सहेजा नहीं गया है)

चरण 5

  • इंसर्ट स्टेटमेंट को ट्रिगर करने के लिए किसी अन्य पंक्ति पर क्लिक करें (Red Asterix गायब हो जाएगा)

नोट 1 : यदि कॉलम सही क्रम में नहीं हैं जैसा कि लक्ष्य तालिका में है, तो आप हमेशा चरण २ का अनुसरण कर सकते हैं, और लक्ष्य तालिका में उसी क्रम में कॉलम का चयन करें।

नोट - 2 - यदि आपके पास पहचान कॉलम है तो निष्पादित करें SET IDENTITY_INSERT sometableWithIdentity ONऔर फिर ऊपर दिए गए चरणों का पालन करें, और अंत में निष्पादित करेंSET IDENTITY_INSERT sometableWithIdentity OFF


3

यदि आप एक स्थायी रूप से बहुत अधिक डेटा स्थानांतरित कर रहे हैं, अर्थात एक अस्थायी तालिका को आबाद नहीं कर रहा है, तो मैं SQL सर्वर आयात / निर्यात डेटा का उपयोग करने की सलाह दूंगा टेबल-टू-टेबल मैपिंग के लिए दूंगा।

आयात / निर्यात उपकरण आमतौर पर सीधे SQL से बेहतर होता है जब आप अपने मानचित्रण में रूपांतरण और संभावित मूल्य ट्रंकेशन टाइप करते हैं। आमतौर पर, आपकी मैपिंग जितनी जटिल होती है, आप उतने ही अधिक उत्पादक होते हैं, जो डायरेक्ट SQL के बजाय इंटीग्रेशन सर्विसेज (SSIS) जैसे ETL टूल का उपयोग कर रहे होते हैं।

आयात / निर्यात उपकरण वास्तव में एक SSIS विज़ार्ड है, और आप अपने काम को एक dtsx पैकेज के रूप में सहेज सकते हैं।


2

मुझे लगता है कि यह कथन वह कर सकता है जो आप चाहते हैं।

INSERT INTO newTableName (SELECT column1, column2, column3 FROM oldTable);

0
 Dim ofd As New OpenFileDialog
                ofd.Filter = "*.mdb|*.MDB"
                ofd.FilterIndex = (2)
                ofd.FileName = "bd1.mdb"
                ofd.Title = "SELECCIONE LA BASE DE DATOS ORIGEN (bd1.mdb)"
                ofd.ShowDialog()
                Dim conexion1 = "Driver={Microsoft Access Driver (*.mdb)};DBQ=" + ofd.FileName
                Dim conn As New OdbcConnection()
                conn.ConnectionString = conexion1
                conn.Open()



            'EN ESTE CODIGO SOLO SE AGREGAN LOS DATOS'
            Dim ofd2 As New OpenFileDialog
            ofd2.Filter = "*.mdb|*.MDB"
            ofd2.FilterIndex = (2)
            ofd2.FileName = "bd1.mdb"
            ofd2.Title = "SELECCIONE LA BASE DE DATOS DESTINO (bd1.mdb)"
            ofd2.ShowDialog()
            Dim conexion2 = "Driver={Microsoft Access Driver (*.mdb)};DBQ=" + ofd2.FileName
            Dim conn2 As New OdbcConnection()
            conn2.ConnectionString = conexion2
            Dim cmd2 As New OdbcCommand
            Dim CADENA2 As String

            CADENA2 = "INSERT INTO EXISTENCIA IN '" + ofd2.FileName + "' SELECT * FROM EXISTENCIA IN '" + ofd.FileName + "'"


            cmd2.CommandText = CADENA2
            cmd2.Connection = conn2
            conn2.Open()
            Dim dA2 As New OdbcDataAdapter
            dA2.SelectCommand = cmd2
            Dim midataset2 As New DataSet
            dA2.Fill(midataset2, "EXISTENCIA")
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.