2013-06-24 7 views
5

SQL सर्वर 2008 R2 में, उपयोगकर्ता Tasks और Generate Scripts का चयन करके डेटाबेस पर राइट क्लिक करके डेटा के साथ एक तालिका को स्क्रिप्ट कर सकता है। एक विज़ार्ड पॉप अप करेगा, उपयोगकर्ताओं को यह पूछेगा कि वे क्या चाहते हैं (एकाधिक टेबल, एक टेबल, आदि) कुछ उन्नत विकल्पों के साथ (जो उपयोगकर्ता को टेबल स्कीमा और डेटा दोनों प्राप्त करने की अनुमति देता है); प्रश्नों के लिए, see this useful post of what's being done ("द हैंडी" के तहत)।कोड से डेटा के साथ स्क्रिप्ट तालिका

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

जब मैं SqlConnection का उपयोग करता हूं, तो मुझे इस प्रकार के कार्य को करने का विकल्प नहीं देखा जाता है (हालांकि यह किसी और चीज़ के साथ हो सकता है)। यह जादूगर कैसे सुलभ है?

अद्यतन: प्रारंभिक उत्तर के बाद, मुझे लगता है कि यह संभव नहीं था, इसलिए मैंने टीएसक्यूएल से अधिक परिचित लोगों के लिए एक दिलचस्प समाधान तैयार किया।

CREATE PROCEDURE usp_ScriptTableAndData 
AS 
BEGIN 

    CREATE TABLE ScriptTemp(
     Value VARCHAR(8000) 
    ) 

    INSERT INTO ScriptTemp 
    SELECT '/* Build the Reference Table */' 

    INSERT INTO ScriptTemp 
    SELECT 'USE [DB] 
     GO 

     SET ANSI_NULLS ON 
     GO 

     SET QUOTED_IDENTIFIER ON 
     GO 

     SET ANSI_PADDING ON 
     GO 

     CREATE TABLE [dbo].[Table](
      [ID] [int] IDENTITY(1,1) NOT NULL, 
      [Reference] [varchar](50) NULL, 
      [TableDate] [datetime] NOT NULL, 
      [Display] [bit] NULL 
     ) 

     SET ANSI_PADDING OFF 
     GO 


     INSERT INTO ScriptTemp 
     SELECT '/* Insert the Table Values */' 

     INSERT INTO ScriptTemp 
     SELECT 'INSERT INTO Table VALUES(' + CAST(ID AS VARCHAR(3)) + 
      ',' + '''' + LTRIM(RTRIM(ISNULL(Reference,'NULL'))) + '''' + 
      ',' + '''' + CONVERT(VARCHAR(25),TableDate,120) + '''' + 
      ',' + ISNULL(CAST(Display AS VARCHAR(4)),'NULL') + ')' 
     FROM dbo.Table 

     EXECUTE xp_cmdshell 'BCP "SELECT * FROM DB.dbo.ScriptTemp" queryout "\\FileSharePath\Script.sql" -T -c -SSERVER' 

     DROP TABLE ScriptTemp 
END 

इस तालिका और डेटा (मुझे लगता है कि Bill Fellows created एक ऐसी ही स्क्रिप्ट से विचार आया) के साथ एक स्क्रिप्ट बनाता है: मैं नीचे एक करने के लिए इसी तरह की एक संग्रहीत प्रक्रिया बनाया। वैसे भी, यह समाधान भी काम करता है, और टीएसक्यूएल से अधिक परिचित लोगों के लिए काफी आसान है। उत्तर देने वाले सभी को धन्यवाद।

+3

मैंने आपका शीर्षक संपादित किया है। कृपया देखें, "[प्रश्नों में उनके शीर्षक में" टैग "शामिल होना चाहिए?] (Http://meta.stackexchange.com/questions/19190/)", जहां आम सहमति है "नहीं, उन्हें नहीं करना चाहिए"। –

उत्तर

3

आपको SQL Server Management Objects (SMO) देखें। मैंने पहले .NET अनुप्रयोगों में कस्टम स्क्रिप्टिंग बनाने के लिए इसका उपयोग किया है, लेकिन मुझे यकीन नहीं है कि यह डेटा की स्क्रिप्टिंग का समर्थन करता है या नहीं।

MSDN से:

एसक्यूएल सर्वर प्रबंधन ऑब्जेक्ट (एसएमओ) Microsoft SQL सर्वर की कार्यक्रम संबंधी प्रबंधन के लिए बनाया गया वस्तुओं रहे हैं। आप SMO का उपयोग पर अनुकूलित SQL सर्वर प्रबंधन अनुप्रयोगों का निर्माण कर सकते हैं।

+2

एसएमओ स्क्रिप्टिंग डेटा का समर्थन करता है। उदाहरण के लिए यहां देखें: http://stackoverflow.com/questions/5365408/c-sharp-smo-scripting-table-data-to-file-throwing-error – RBarryYoung

+0

@ahkvk धन्यवाद जो कि मैं वास्तव में जो खोज रहा था - बहुत बढ़िया! – Question3CPO

2

विज़ार्ड एसक्यूएल प्रबंधन कंसोल की एक विशेषता है और केवल वहां से उपलब्ध है। यह SqlConnection वर्ग या .NET Framework के किसी भी हिस्से का हिस्सा नहीं है।

इस तरह की पूछ जहां फ़ॉन्ट्स संवाद है जब आप अपने कोड में एक शब्द स्वचालन वस्तु का दृष्टांत की तरह है।

+0

यह .NET ढांचे में एसएमओ का हिस्सा है। यह भी है कि एसएसएमएस कैसे करता है (अधिकांश भाग के लिए)। – RBarryYoung

+0

@catfood धन्यवाद; दूसरे जवाब से पहले, मैंने माना कि यह संभव नहीं था और मेरे स्वयं के समाधान को डिजाइन करने में कुछ घंटे बिताए, जो एक चुनौतीपूर्ण अभ्यास था। – Question3CPO

+0

और मैंने एसएमओ के बारे में कुछ सीखा। धन्यवाद, RBarryYoung। आपको भ्रामक करने के बारे में खेद है, प्रश्न 3 सीसीओ। – catfood

0

आप SQL सर्वर प्रबंधन स्टूडियो का उपयोग कर इस ऑपरेशन को कर सकते हैं। डाटाबेस इंस्टेंस पर राइट क्लिक करें -> कार्य -> ​​स्क्रिप्ट जेनरेट करें -> फिर परिचय भरें और ऑब्जेक्ट भरें (जिसमें चुनिंदा टेबल आप डेटा स्क्रिप्ट चाहते हैं) -> अब स्क्रिप्टिंग विकल्प सेट करें -> उन्नत पर क्लिक करें और फिर सामान्य अनुभाग में -> केवल स्कीमा से डेटा के रूप में डेटा के प्रकार को स्क्रिप्ट पर सेट करें। आपको चयनित स्थान के रूप में पूर्ण डेटा स्क्रिप्ट मिल जाएगी।

+1

ओपी इसे अपने प्रश्न के आधार पर जानता है - वह पूछ रहा है कि एपीआई स्टैंड पॉइंट से ऐसा करने का कोई तरीका है और इस ऑपरेशन को करने के लिए एसएसएमएस से गुजरना नहीं है। – tsells

1

स्कीमा को स्क्रिप्ट करने की कार्यक्षमता एसक्यूएल पुस्तकालयों में नहीं है, इसकी दृश्य स्टूडियो पुस्तकालयों में है।

उदा। माइक्रोसॉफ्ट। डेटा .chema.ScriptDom.Sql, माइक्रोसॉफ्ट.डाटा। स्केमा।ScriptDom; या क्या हर इसकी अब अब के बारे में अपनी भूल है, लेकिन इसकी अभी भी वहाँ VS2010 और VS2012 उद्यम संस्करण में छिपा (-

विजुअल स्टूडियो टीम/एक पुरुष गर्ट ड्रेपर्स http://blogs.msdn.com/b/gertd/ बुलाया कुछ विजुअल स्टूडियो 2008 डेटाबेस संस्करण कहा जाता है टीम प्रणाली पर काम किया बुलाया)। आपको डेटाबेस से स्कीमा और डेटा की तुलना करने की क्षमता मिलती है, उन्होंने यह कैसे किया? माइक्रोसॉफ्ट ने इसे कक्षाओं के शेड लोड को लिखा, जिसका आप उपयोग कर सकते हैं।

वहाँ अप्रयुक्त कार्यक्षमता के बहुत सारे है, निश्चित रूप से यह आपके सवाल का सीधे, (एसएमओ) का उत्तर न मिले लेकिन उम्मीद है कि यह आप एक विचार देता है इसके संभावित और किसी और काम के सबसे किया है कि।

क्या आपने SQLPackage.exe देखा है? यह स्कीमा और डेटा को सभी ज़िप फ़ाइल में पैक किया जाता है।

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