2012-11-05 12 views
5

का उपयोग कर रहा सी # आवेदन के द्वारा डेटाबेस की योजना बनाने के लिए Sql सर्वर Smo उपयोग कर रहा हूँ Sql सर्वर का डेटा प्राप्त करें। हालांकि, मैं थोड़ा अधिक की जरूरत है, मैं भी नीचे की तरह एक स्क्रिप्ट के रूप में प्रत्येक तालिका से डेटा प्राप्त करने की जरूरत है:एसएमओ

--........................................ 
INSERT INTO Table123 (...) VALUES (....) 
INSERT INTO Table456 (...) VALUES (....) 
--........................................ 

मैं ऐसा कैसे और यह संभव है कर सकते हैं? ध्यान दें कि मुझे smo का उपयोग करके बिल्कुल एक स्क्रिप्ट बनाने की आवश्यकता है, न कि डेटाबेस के * .bak, आदि

+0

'smo' के instate दृष्टिकोण? यह डेटाबेस स्कीमा भी बनाता है। आप मैन्युअल रूप से डालने/अपडेट/हटाने के लिए एसक्यूएल स्क्रिप्ट उत्पन्न कर सकते हैं। चेक [इस लिंक] (http://www.codeproject.com/Articles/14528/Generate-SQL-INSERT-commands-programmatically) – Jalal

+1

एसक्यूएल सर्वर, जहां तक ​​मुझे पता है हूँ, अपने डेटा डंप करने के लिए कोई सुविधा नहीं है 'INSERT' स्क्रिप्ट का रूप। आप उदाहरण के लिए बीसीपी का उपयोग कर सकते हैं सीएसवी फाइलें और एक प्रारूप फ़ाइल, लेकिन यह आपके द्वारा पूछे जा रहे प्रारूप के प्रारूप में फिट नहीं होगी। –

+0

यदि आप स्कीमा का निर्माण कर रहे हैं तो आप टेक्स्ट को टेक्स्ट के रूप में क्यों नहीं बना सकते हैं। – Paparazzi

उत्तर

24

एसएमओ की Scripter कक्षा पर एक नज़र डालें। निम्न बुनियादी नमूना मेरे लिए काम करता है:

using System.Data.SqlClient; 
using System.IO; 
using System.Text; 
using Microsoft.SqlServer.Management.Common; 
using Microsoft.SqlServer.Management.Smo; 

namespace SqlExporter 
{ 
class Program 
{ 
static void Main(string[] args) 
{ 
    var server = new Server(new ServerConnection {ConnectionString = new SqlConnectionStringBuilder {DataSource = @"LOCALHOST\SQLEXPRESS", IntegratedSecurity = true}.ToString()}); 
    server.ConnectionContext.Connect(); 
    var database = server.Databases["MyDatabase"]; 
    var output = new StringBuilder(); 

    foreach (Table table in database.Tables) 
    { 
     var scripter = new Scripter(server) {Options = {ScriptData = true}}; 
     var script = scripter.EnumScript(new SqlSmoObject[] {table}); 
     foreach (var line in script) 
      output.AppendLine(line); 
    } 
    File.WriteAllText(@"D:\MyDatabase.sql", output.ToString()); 
} 
} 
} 

नोट: यह उदाहरण तालिकाओं के बीच किसी भी विदेशी कुंजी की कमी या अन्य निर्भरता संभाल नहीं करता है।

संदर्भ:

  1. This SO question
  2. This MSDN forum question (कि मुझे Scripter वर्ग पर बदल गया) (कि समझाया EnumScript विधि का उपयोग करने के लिए कैसे) क्यों पहले का उपयोग नहीं कर इकाई की रूपरेखा कोड
+0

क्या किसी तालिका के डेटा का केवल एक हिस्सा स्क्रिप्ट करने का तरीका है? (एक शर्त कहां व्यक्त करना) – thestral

+0

मैं यह करने की भी कोशिश कर रहा हूं, यानी एक शर्त कहां व्यक्त करना, क्या किसी को पता है कि एसएमओ के साथ यह संभव है या नहीं? – Alicia

संबंधित मुद्दे