sql-server SQL सर्वर तालिका के लिए INSERT कथन स्वचालित रूप से उत्पन्न करने का सबसे अच्छा तरीका क्या है?




code-generation (16)

हम एक नया आवेदन लिख रहे हैं, और परीक्षण करते समय, हमें डमी डेटा का एक गुच्छा की आवश्यकता होगी। मैंने प्रासंगिक तालिका में एक्सेल फ़ाइलों को डंप करने के लिए एमएस एक्सेस का उपयोग कर डेटा जोड़ा है।

हर बार, हम प्रासंगिक तालिकाओं को "रीफ्रेश" करना चाहते हैं, जिसका अर्थ है कि उन्हें सभी को छोड़ना, उन्हें फिर से बनाना, और सहेजी गई एमएस एक्सेस एपेंड क्वेरी चलाना।

पहला भाग (ड्रॉप और री-बिल्डिंग) एक आसान एसक्यूएल स्क्रिप्ट है, लेकिन आखिरी हिस्सा मुझे क्रिंग करता है। मैं एक एकल सेटअप स्क्रिप्ट चाहता हूं जिसमें डमी डेटा को पुन: उत्पन्न करने के लिए INSERT का एक समूह हो।

मेरे पास अब टेबल में डेटा है। उस डेटासेट से INSERT कथन की एक बड़ी सूची स्वचालित रूप से उत्पन्न करने का सबसे अच्छा तरीका क्या है?

मैं TOAD (ओरेकल के लिए) जैसे कुछ के बारे में सोच रहा हूं, जहां आप ग्रिड पर राइट-क्लिक कर सकते हैं और सेव करें-> स्टेटमेंट सम्मिलित करें पर क्लिक करें, और जहां भी आप चाहें वहां एक बड़ी एसक्यूएल स्क्रिप्ट डंप करेंगे।

ऐसा करने का एकमात्र तरीका यह है कि मैं टेबल को एक्सेल शीट में सहेजना चाहता हूं और फिर प्रत्येक पंक्ति के लिए INSERT बनाने के लिए एक्सेल फॉर्मूला लिखना चाहता हूं, जो निश्चित रूप से सबसे अच्छा तरीका नहीं है।

मैं SQL सर्वर 2005 डेटाबेस से कनेक्ट करने के लिए 2008 प्रबंधन स्टूडियो का उपयोग कर रहा हूं।


मैं ऐसा करने के लिए स्क्लाइट का उपयोग करता हूं। मुझे स्क्रैच / टेस्ट डेटाबेस बनाने के लिए बहुत उपयोगी लगता है।

sqlite3 foo.sqlite .dump > foo_as_a_bunch_of_inserts.sql


क्या आपके पास अभी तक उत्पादन डेटाबेस में डेटा है? यदि ऐसा है, तो आप डेटा को डीटीएस के माध्यम से डेटा रीफ्रेश कर सकते हैं। हम सप्ताहांत पर साप्ताहिक करते हैं और हमारे परीक्षण के लिए हर सप्ताह स्वच्छ, वास्तविक डेटा रखना बहुत अच्छा होता है।

यदि आपके पास अभी तक उत्पादन नहीं है, तो आपको एक डेटाबेस बनाना चाहिए जो वे चाहते हैं कि आप इसे (ताजा) चाहते हैं। फिर, डेटाबेस को डुप्लिकेट करें और अपने परीक्षण वातावरण के रूप में उस नव निर्मित डेटाबेस का उपयोग करें। जब आप स्वच्छ संस्करण चाहते हैं, तो बस अपने साफ एक को फिर से डुबोएं और बॉब के अपने चाचा को दोहराएं


अपने काम से पहले डेटा का बैकअप क्यों न लें, फिर जब आप इसे रीफ्रेश करना चाहते हैं तो पुनर्स्थापित करें?

यदि आपको आवेषण उत्पन्न करना होगा तो प्रयास करें: http://vyaskn.tripod.com/code.htm#inserts


यह Visual Studio का उपयोग करके भी किया जा सकता है (कम से कम संस्करण 2013 में)।

वीएस 2013 में आवेषण कथन पर आधारित पंक्तियों की सूची को फ़िल्टर करना भी संभव है , जैसा कि मुझे पता है एसएसएमएस में यह संभव नहीं है।

निम्नलिखित चरणों का पालन करें:

  • "SQL सर्वर ऑब्जेक्ट एक्सप्लोरर" विंडो खोलें (मेनू: / व्यू / SQL सर्वर ऑब्जेक्ट एक्सप्लोरर)
  • डेटाबेस और इसकी तालिकाओं को खोलें / विस्तृत करें
  • तालिका पर राइट क्लिक करें और संदर्भ मेनू से "डेटा देखें" चुनें
  • यह मुख्य क्षेत्र में डेटा प्रदर्शित करेगा
  • वैकल्पिक चरण: फ़िल्टर आइकन पर क्लिक करें "डेटा सेट सॉर्ट करें और फ़िल्टर करें" (परिणाम के ऊपर पंक्ति पर बाईं ओर से चौथा आइकन) और कुछ फ़िल्टर को एक या अधिक कॉलम पर लागू करें
  • "स्क्रिप्ट" या "स्क्रिप्ट टू फाइल" आइकन पर क्लिक करें (शीर्ष पंक्ति के दाईं ओर वाले आइकन, वे कागज़ की छोटी चादरों की तरह दिखते हैं)

यह चयनित तालिका के लिए सक्रिय विंडो या फ़ाइल में (सशर्त) सम्मिलित कथन बनाएगा।


"फ़िल्टर" और "स्क्रिप्ट" बटन विजुअल स्टूडियो 2013 :


आप एसएसएमएस टूल्स पैक (एसक्यूएल सर्वर 2005 और 2008 के लिए उपलब्ध) का उपयोग कर सकते हैं। यह सम्मिलित बयान उत्पन्न करने के लिए एक सुविधा के साथ आता है।

http://www.ssmstoolspack.com/


मैं एसएसएमएस 2008 संस्करण 10.0.5500.0 का उपयोग कर रहा हूँ। जेनरेट स्क्रिप्ट विज़ार्ड के हिस्से के रूप में इस संस्करण में, उन्नत बटन की बजाय, नीचे दी गई स्क्रीन है। इस मामले में, मैं सिर्फ डेटा डालना चाहता था और कोई बयान नहीं देता था, इसलिए मुझे दो घेरे वाले गुणों को बदलना पड़ा


हम इस संग्रहीत प्रक्रिया का उपयोग करते हैं - यह आपको विशिष्ट तालिकाओं को लक्षित करने और क्लॉज का उपयोग करने की अनुमति देता है। आप here पाठ पा सकते हैं।

उदाहरण के लिए, यह आपको ऐसा करने देता है: तालिका 'शीर्षक' के लिए INSERT कथन उत्पन्न करने के लिए:

EXEC sp_generate_inserts 'titles'


मैंने इस script उपयोग किया जो मैंने अपने ब्लॉग पर रखा है ( एसक्यूएल सर्वर पर कैसे सम्मिलित कथन प्रक्रियाएं उत्पन्न करें )।

अब तक मेरे लिए काम किया है, हालांकि वे ऐसी बग हो सकते हैं जिन्हें मैंने अभी तक नहीं खोजा है।


निश्चित नहीं है, अगर मैं आपके प्रश्न को सही ढंग से समझता हूं।

यदि आपके पास एमएस-एक्सेस में डेटा है, जिसे आप इसे SQL सर्वर पर ले जाना चाहते हैं - तो आप डीटीएस का उपयोग कर सकते हैं।
और, मुझे लगता है कि आप सभी आईएनएसईआरटी बयान देखकर एसक्यूएल प्रोफाइलर का उपयोग कर सकते हैं, मुझे लगता है।


जैसा कि @ माइक रिटाको द्वारा उल्लेख किया गया है लेकिन एसएसएमएस 2008 आर 2 के लिए अपडेट किया गया है

  1. डेटाबेस नाम पर राइट क्लिक करें
  2. कार्य> स्क्रिप्ट जेनरेट करें चुनें
  3. आपकी सेटिंग्स के आधार पर परिचय पृष्ठ दिखाया जा सकता है या नहीं
  4. 'विशिष्ट डेटाबेस ऑब्जेक्ट्स का चयन करें' चुनें,
  5. पेड़ दृश्य का विस्तार करें और प्रासंगिक तालिकाओं की जांच करें
  6. अगला पर क्लिक करें
  7. उन्नत क्लिक करें
  8. सामान्य अनुभाग के तहत, 'डेटा के प्रकार के प्रकार' के लिए उपयुक्त विकल्प चुनें
  9. जादूगर को पूरा करें

फिर आप एसएसएमएस से सीधे डेटा के लिए सभी INSERT कथन प्राप्त करेंगे।

2016-10-25 संपादित करें एसक्यूएल सर्वर 2016 / एसएसएमएस 13.0.15900.1

  1. डेटाबेस नाम पर राइट क्लिक करें

  2. कार्य> स्क्रिप्ट जेनरेट करें चुनें

  3. आपकी सेटिंग्स के आधार पर परिचय पृष्ठ दिखाया जा सकता है या नहीं

  4. 'विशिष्ट डेटाबेस ऑब्जेक्ट्स का चयन करें' चुनें,

  5. पेड़ दृश्य का विस्तार करें और प्रासंगिक तालिकाओं की जांच करें

  6. अगला पर क्लिक करें

  7. उन्नत क्लिक करें

  8. सामान्य अनुभाग के तहत, 'डेटा के प्रकार के प्रकार' के लिए उपयुक्त विकल्प चुनें

  9. ओके पर क्लिक करें

  10. चुनें कि क्या आप आउटपुट को एक नई क्वेरी, क्लिपबोर्ड या फ़ाइल पर जाना चाहते हैं

  11. दो बार अगला क्लिक करें

  12. आपकी स्क्रिप्ट आपके द्वारा उठाई गई सेटिंग्स के अनुसार तैयार की जाती है

  13. समाप्त क्लिक करें


मैंने इस पर बहुत कुछ शोध किया है, लेकिन मुझे इसके लिए ठोस समाधान नहीं मिला। वर्तमान में जो दृष्टिकोण मैं अनुसरण करता हूं वह SQL सर्वर प्रबंधन स्टूडियो से एक्सेल में सामग्री की प्रतिलिपि बनाता है और फिर डेटा को ओरेकल-TOAD में आयात करता है और फिर सम्मिलित विवरण उत्पन्न करता है


GenerateData लिए एक अद्भुत उपकरण है। इसमें बदलाव करना भी बहुत आसान है क्योंकि स्रोत कोड आपके लिए उपलब्ध है। कुछ अच्छी विशेषताएं:

  • लोगों के नाम और स्थानों के लिए नाम जनरेटर
  • जेनरेशन प्रोफाइल को सहेजने की क्षमता (इसे डाउनलोड करने और स्थानीय रूप से स्थापित करने के बाद)
  • स्क्रिप्ट के माध्यम से पीढ़ी को अनुकूलित और कुशल बनाने की क्षमता
  • डेटा के लिए कई अलग-अलग आउटपुट (सीएसवी, जावास्क्रिप्ट, जेएसओएन, आदि) (यदि आपको विभिन्न वातावरण में सेट का परीक्षण करने की आवश्यकता है और डेटाबेस पहुंच को छोड़ना चाहते हैं)
  • मुफ्त लेकिन अगर आपको सॉफ़्टवेयर उपयोगी लगता है तो दान करने पर विचार करें :)।


यदि आपको प्रोग्रामेटिक एक्सेस की आवश्यकता है, तो आप ओपन सोर्स संग्रहीत प्रक्रिया 'जेनरेट इन्सर्ट' का उपयोग कर सकते हैं।

INSERT कथन जनरेटर

एक सरल और त्वरित उदाहरण के रूप में, एक तालिका के लिए INSERT कथन उत्पन्न करने के लिए AdventureWorks.Person.AddressType निम्नलिखित कथन निष्पादित करें:

USE [AdventureWorks];
GO
EXECUTE dbo.GenerateInsert @ObjectName = N'Person.AddressType';

यह निम्न स्क्रिप्ट उत्पन्न करेगा:

SET NOCOUNT ON
SET IDENTITY_INSERT Person.AddressType ON
INSERT INTO Person.AddressType
([AddressTypeID],[Name],[rowguid],[ModifiedDate])
VALUES
 (1,N'Billing','B84F78B1-4EFE-4A0E-8CB7-70E9F112F886',CONVERT(datetime,'2002-06-01 00:00:00.000',121))
,(2,N'Home','41BC2FF6-F0FC-475F-8EB9-CEC0805AA0F2',CONVERT(datetime,'2002-06-01 00:00:00.000',121))
,(3,N'Main Office','8EEEC28C-07A2-4FB9-AD0A-42D4A0BBC575',CONVERT(datetime,'2002-06-01 00:00:00.000',121))
,(4,N'Primary','24CB3088-4345-47C4-86C5-17B535133D1E',CONVERT(datetime,'2002-06-01 00:00:00.000',121))
,(5,N'Shipping','B29DA3F8-19A3-47DA-9DAA-15C84F4A83A5',CONVERT(datetime,'2002-06-01 00:00:00.000',121))
,(6,N'Archive','A67F238A-5BA2-444B-966C-0467ED9C427F',CONVERT(datetime,'2002-06-01 00:00:00.000',121))
SET IDENTITY_INSERT Person.AddressType OFF

समस्या में मेरा योगदान, एक पावरहेल INSERT स्क्रिप्ट जेनरेटर जो आपको बोझिल एसएसएमएस जीयूआई का उपयोग किए बिना एकाधिक टेबल स्क्रिप्ट करने देता है। स्रोत नियंत्रण में तेजी से "बीज" डेटा के लिए बढ़िया है।

  1. नीचे दी गई स्क्रिप्ट को "filename.ps1" के रूप में सहेजें।
  2. "मुझे अनुकूलित करें" के तहत क्षेत्रों में अपना स्वयं का संशोधन करें।
  3. आप किसी भी क्रम में स्क्रिप्ट में टेबल की सूची जोड़ सकते हैं।
  4. आप पावरहेल आईएसई में स्क्रिप्ट खोल सकते हैं और Play बटन दबा सकते हैं, या पावरहेल कमांड प्रॉम्प्ट में स्क्रिप्ट को निष्पादित कर सकते हैं।

डिफ़ॉल्ट रूप से, उत्पन्न आईएनएसईआरटी स्क्रिप्ट स्क्रिप्ट के समान फ़ोल्डर के तहत "SeedData.sql" होगी।

आपको SQL सर्वर प्रबंधन ऑब्जेक्ट असेंबली स्थापित करने की आवश्यकता होगी, यदि आपके पास SSMS इंस्टॉल है तो वहां होना चाहिए।

Add-Type -AssemblyName ("Microsoft.SqlServer.Smo, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91")
Add-Type -AssemblyName ("Microsoft.SqlServer.ConnectionInfo, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91")



#CUSTOMIZE ME
$outputFile = ".\SeedData.sql"
$connectionString = "Data Source=.;Initial Catalog=mydb;Integrated Security=True;"



$sqlConnection = new-object System.Data.SqlClient.SqlConnection($connectionString)
$conn = new-object Microsoft.SqlServer.Management.Common.ServerConnection($sqlConnection)
$srv = new-object Microsoft.SqlServer.Management.Smo.Server($conn)
$db = $srv.Databases[$srv.ConnectionContext.DatabaseName]
$scr = New-Object Microsoft.SqlServer.Management.Smo.Scripter $srv
$scr.Options.FileName = $outputFile
$scr.Options.AppendToFile = $false
$scr.Options.ScriptSchema = $false
$scr.Options.ScriptData = $true
$scr.Options.NoCommandTerminator = $true

$tables = New-Object Microsoft.SqlServer.Management.Smo.UrnCollection



#CUSTOMIZE ME
$tables.Add($db.Tables["Category"].Urn)
$tables.Add($db.Tables["Product"].Urn)
$tables.Add($db.Tables["Vendor"].Urn)



[void]$scr.EnumScript($tables)

$sqlConnection.Close()

माइक्रोसॉफ्ट को एसएसएमएस 2008 की इस कार्यक्षमता का विज्ञापन करना चाहिए। जिस सुविधा को आप ढूंढ रहे हैं वह जनरेट स्क्रिप्ट उपयोगिता में बनाया गया है, लेकिन कार्यक्षमता डिफ़ॉल्ट रूप से बंद हो जाती है और तालिका को स्क्रिप्ट करते समय सक्षम होना चाहिए।

SQL प्रबंधन स्टूडियो 2008 में कोई स्क्रिप्ट या ऐड-इन्स का उपयोग करके, आपकी तालिका में मौजूद सभी डेटा के लिए INSERT कथन उत्पन्न करने के माध्यम से यह एक त्वरित रन है:

  1. डेटाबेस पर राइट-क्लिक करें और कार्य > स्क्रिप्ट जेनरेट करें पर जाएं।
  2. उन टेबल (या ऑब्जेक्ट्स) का चयन करें जिन्हें आप स्क्रिप्ट उत्पन्न करना चाहते हैं।
  3. स्क्रिप्टिंग विकल्प टैब सेट पर जाएं और उन्नत बटन पर क्लिक करें।
  4. सामान्य श्रेणी में, स्क्रिप्ट के लिए डेटा के प्रकार पर जाएं
  5. 3 विकल्प हैं: स्कीमा केवल , डेटा केवल , और स्कीमा और डेटा । उपयुक्त विकल्प का चयन करें और ठीक पर क्लिक करें।

इसके बाद आप सीएसएमएस से सीधे डेटा के लिए CREATE TABLE स्टेटमेंट और सभी INSERT कथन प्राप्त करेंगे।





code-generation