SQL सर्वर - एक डेटाबेस तालिका की एक प्रति बनाएँ और इसे उसी डेटाबेस में रखें?


108

मेरे पास एक डेटाबेस डीबी में एक टेबल एबीसी है। मैं एक ही DB में ABC_1, ABC_2, ABC_3 के नाम के साथ ABC की प्रतियां बनाना चाहता हूं। मैं प्रबंधन स्टूडियो (अधिमानतः) या एसक्यूएल प्रश्नों का उपयोग कैसे कर सकता हूं?

यह SQL Server 2008 R2 के लिए है।


1
एक अन्य पोस्ट जो सीधे संबंधित नहीं है, लेकिन उपरोक्त उपयोग के मामले से संबंधित हो सकती है - stackoverflow.com/questions/6810425/… यह तब उपयोगी हो सकता है जब आप तालिका की प्रतियां संपादित करना चाहते हैं (जैसे। अशक्त करने की अनुमति दें, डेटा प्रकार बदलें आदि) ।) प्रतियां पुनः बनाने के लिए बिना।
अगली कड़ी। लाला

जवाबों:


212

उपयोग करें SELECT ... INTO:

SELECT *
INTO ABC_1
FROM ABC;

यह एक नई तालिका बनाएगा ABC_1जिसमें समान स्तंभ संरचना होती है ABCऔर जिसमें समान डेटा होता है। अड़चनें (जैसे कुंजियाँ, डिफ़ॉल्ट मान), हालांकि, नोट-कॉपी किए गए हैं।

आप प्रत्येक बार एक अलग तालिका नाम के साथ इस क्वेरी को कई बार चला सकते हैं।


यदि आपको डेटा की प्रतिलिपि बनाने की आवश्यकता नहीं है, केवल एक ही स्तंभ संरचना के साथ एक नई खाली तालिका बनाने के लिए, WHEREएक काल्पनिकता के साथ एक खंड जोड़ें :

SELECT *
INTO ABC_1
FROM ABC
WHERE 1 <> 1;

3
मेरी समस्या का सही उत्तर।
अगली कड़ी। लर्नर

8
पूरी तरह से काम नहीं करता है .... मूल में गणना किए गए कॉलम को लक्ष्य में समान रूप से कॉपी नहीं किया गया है। इसके अलावा, पीके और डिफ़ॉल्ट बाधाओं या तो नकल नहीं कर रहे हैं
साइमन ग्रीन

@SimonGreen - आप अपने कोड के साथ इस समस्या के लिए एक नया प्रश्न पोस्ट कर सकते हैं।
महमूद गमाल

3
बेशक यह पूरी तरह से काम नहीं करता है। उन्होंने चेतावनी दी कि नकल न हो, न ही प्राथमिक कुंजी, या डिफ़ॉल्ट मान। वह जो आदेश देता है, वह उसी स्तंभ संरचना के साथ एक नई तालिका बनाता है (जैसे उसने कहा) और आपके लिए नई तालिका में सभी डेटा सम्मिलित करता है।
user5855178

1
मैं SELECT TOP(0) *हमेशा गलत-झूठी WHEREबयान पद्धति की तुलना में क्लीनर का उपयोग करता हूं
थाइमिन

21

SSMS UI के माध्यम से स्कीमा (जनरेट डीडीएल) कॉपी करें

SSMS में ऑब्जेक्ट एक्सप्लोरर में अपने डेटाबेस का विस्तार करें , टेबल्स पर जाएं , जिस तालिका में आप रुचि रखते हैं उस पर राइट क्लिक करें और स्क्रिप्ट टेबल अस , क्रिएट टू , न्यू क्वेरी एडिटर विंडो चुनें । एक मिल रहा है और जगह ( CTRL + एच (डाल यानी तालिका नाम बदलने के लिए) ABCमें लगाएँ कि क्षेत्र और ABC_1में साथ बदलें उसके बाद ठीक )।

T-SQL के माध्यम से स्कीमा की प्रतिलिपि बनाएँ

एसक्यूएल द्वारा यह कैसे करना है, यह दिखाने वाले अन्य उत्तर भी अच्छी तरह से काम करते हैं, लेकिन इस पद्धति के साथ अंतर यह है कि आप किसी भी सूचकांक, बाधाओं और ट्रिगर्स प्राप्त करेंगे।

डेटा कॉपी करें

यदि आप डेटा को शामिल करना चाहते हैं, तो इस तालिका को बनाने के बाद एबीसी से सभी डेटा की प्रतिलिपि बनाने के लिए नीचे की स्क्रिप्ट चलाएँ (पहचान क्षेत्र होने पर समान आईडी मान रखते हुए):

set identity_insert ABC_1 on
insert into ABC_1 (column1, column2) select column1, column2 from ABC
set identity_insert ABC_1 off

1
क्या आप सुनिश्चित हैं कि यह विधि सूचकांकों को भी कॉपी करती है? मैंने कोशिश की और यह नहीं किया।
बॉर्नटूकोड

3
आपको पहचान कॉलम "मैन्युअल रूप से" सेट IDENTITY_INSERTकरने के लिए ON को सेट करना होगा , आपने अपने उदाहरण में ऑर्डर मिलाया। इसके अलावा, आपको
जीन

2
धन्यवाद @ जीन; अच्छी तरह से देखा 6 साल के बाद देखा! फिक्स्ड।
जॉनलेवन

इसने मेरे लिए लगभग समस्या हल कर दी। अंतिम ट्रिक यह है कि आप कॉलम में एक सूची प्राप्त करने के लिए SSMS में "कॉलम" फ़ोल्डर को एडिटर में ट्री में खींच सकते हैं। मेरे पास हर टेबल पर एक टाइमस्टैम्प कॉलम है, इसलिए मुझे कॉलम की सूची प्राप्त करनी थी, और फिर टाइमस्टैम्प हटा दें।
वेड हैटलर

10

यदि आप इसकी सभी बाधाओं के साथ तालिका को डुप्लिकेट करना चाहते हैं और नीचे दिए चरणों के अनुसार कुंजी इस प्रकार है:

  1. SQL प्रबंधन स्टूडियो में डेटाबेस खोलें।
  2. उस तालिका पर राइट-क्लिक करें जिसे आप डुप्लिकेट करना चाहते हैं।
  3. स्क्रिप्ट टेबल को चुनें - जैसे -> क्रिएट टू -> न्यू क्वेरी एडिटर विंडो। यह एक नई क्वेरी विंडो में तालिका को फिर से बनाने के लिए एक स्क्रिप्ट उत्पन्न करेगा।
  4. स्क्रिप्ट में तालिका का नाम और रिश्तेदार कुंजियाँ और बाधाएँ बदलें।
  5. स्क्रिप्ट निष्पादित करें।

फिर डेटा को कॉपी करने के लिए इसे स्क्रिप्ट के नीचे चलाएं:

SET IDENTITY_INSERT DuplicateTable ON

INSERT Into DuplicateTable ([Column1], [Column2], [Column3], [Column4],... ) 
SELECT [Column1], [Column2], [Column3], [Column4],... FROM MainTable

SET IDENTITY_INSERT DuplicateTable OFF

4

1 विकल्प

select *
  into ABC_1
  from ABC;

दूसरा विकल्प: SSIS का उपयोग करें, जो ऑब्जेक्ट एक्सप्लोरर में डेटाबेस पर राइट क्लिक करें> सभी कार्य> निर्यात डेटा

  • स्रोत और लक्ष्य: आपका डी.बी.
  • स्रोत तालिका: एबीसी
  • लक्ष्य तालिका: ABC_1 (तालिका बनाई जाएगी)

2

यह एक और विकल्प है:

select top 0 * into <new_table> from <original_table>

2
यह अनुरोध डेटा के बिना कॉपी टेबल है। उपयोगकर्ता को तालिकाओं को कॉपी करने के लिए कहा।
अलेग्जेंडर

1

एसक्यूएल सर्वर मैनेजमेंट स्टूडियो या नेटकैट का उपयोग करें और इससे एसक्यूएल में हेरफेर करना आसान होगा


1

तालिका और उसके डेटा, बाधाओं और ट्रिगर की प्रतिलिपि बनाने के लिए आपको SSIS लिखना होगा। हमारे संगठन में कलरम सिस्टम द्वारा काल एडमिन नामक एक सॉफ्टवेयर है जिसे डाउनलोड करने के लिए एक मुफ्त संस्करण है (मुझे लगता है कि कॉपी टेबल वैकल्पिक हैं)

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