2008-12-03 14 views
5

क्या मेरी सभी संग्रहीत प्रक्रियाओं को अलग-अलग .sql फ़ाइलों में थूकने के लिए SQL 2005 में एक सरल प्रक्रिया है। मैं उन्हें VSS में ले जाना चाहता हूं, लेकिन स्रोत प्राप्त करने के लिए प्रत्येक पर क्लिक करने की संभावना से बहुत उत्साहित नहीं हूं, इसे टेक्स्ट फ़ाइल में डंप कर रहा हूं और इसी तरह ...sql फ़ाइलों को संग्रहीत प्रक्रिया

उत्तर

13

SQL प्रबंधन स्टूडियो में डेटाबेस पर राइट क्लिक करें, कार्यों पर जाएं -> स्क्रिप्ट बनाएं, जादूगर walkthrough। पृष्ठों में से एक आपको प्रत्येक ऑब्जेक्ट को अपनी फ़ाइल में स्क्रिप्ट करने देगा।

5

आप यह चुन सकते हैं:

select 
    O.name, M.definition 
from 
    sys.objects as O 
left join 
    sys.sql_modules as M 
    on O.object_id = M.object_id 
where 
    type = 'P' 

और आपको संग्रहित प्रक्रियाओं के लिए नाम और स्रोत कोड मिलता है। उचित रूप से सबसे आसान तरीका, इसे फाइलों में कैसे रखा जाए, सी #, जावा, आदि जैसे कुछ "क्लासिक" languge में है ...

+0

अच्छा! उस बारे में नहीं पता था। – VVS

3

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

2

मैंने एक उपकरण लिखा जिसे मैंने SMOscript कहा था जिसमें प्रति डेटाबेस ऑब्जेक्ट एक एकल .sql फ़ाइल बनाने का विकल्प है।

यह CREATE और DROP स्क्रिप्ट उत्पन्न करने के लिए SQL सर्वर की SMO लाइब्रेरी का उपयोग करता है।

1

Sql Server SMO का उपयोग करने का प्रयास करें। एक उदाहरण नीचे शामिल है:

//C:\Program Files\Microsoft SQL Server\{version}\SDK\Assemblies\ 
using Microsoft.SqlServer; 
using Microsoft.SqlServer.Server; 
using Microsoft.SqlServer.Management.Smo; 
using Microsoft.SqlServer.Management.Common; 
using System.Data.SqlClient; 

string sqlConnectionString=""; 
string databaseName=""; 

var Connection = new SqlConnection(sqlConnectionString); 
Connection.Open(); 
int counter = 0; 
var db= new Server(new ServerConnection(Connection)).Databases[databaseName]; 

foreach (var item in db.StoredProcedures.OfType<StoredProcedure>()) 
{ 
    if (item.IsSystemObject == false) 
    { 
     using (TextWriter writer = new StreamWriter(item.Name+".sql", false)) 
     { 
      writer.WriteLine(item.TextHeader + item.TextBody); 
     } 
    } 
} 
1

तुम भी एक अलग sql फ़ाइल में चयनित डेटाबेस संग्रहीत प्रक्रिया स्क्रिप्ट उत्पन्न करने के लिए निम्न स्क्रिप्ट का उपयोग कर सकते हैं, फ़ाइलों प्रक्रिया के नाम से बनाने के लिए किया जाएगा।

गतिशील क्वेरी और कर्सर का उपयोग करना, आप इसे इस प्रकार कर सकते हैं:

DECLARE @name varchar(100) 
DECLARE @Definition varchar(max) 
DECLARE @sql varchar(300) 
CREATE TABLE TEMPTABLE (ID INT IDENTITY(1,1), def varchar(max)) 
DECLARE script CURSOR 
FOR 
SELECT OBJECT_NAME(SYS.SQL_MODULES.OBJECT_ID), [DEFINITION] FROM 
SYS.SQL_MODULES INNER JOIN SYS.OBJECTS ON 
SYS.OBJECTS.OBJECT_ID = SYS.SQL_MODULES.OBJECT_ID 
WHERE SYS.OBJECTS.TYPE='P' 
OPEN script 
FETCH NEXT FROM script INTO @name, @Definition 
WHILE @@FETCH_STATUS = 0 
BEGIN 
    FETCH NEXT FROM script INTO @name, @Definition 
    INSERT INTO TEMPTABLE VALUES(@definition) 
    SET @Sql = ('BCP "SELECT TOP 1 def FROM TEMPTABLE ORDER BY ID DESC" queryout "C:\' + @name + '.sql" -c -T') 
    EXEC XP_CmdShell @Sql 
END 
CLOSE script 
DEALLOCATE script 
DROP TABLE TEMPTABLE 
संबंधित मुद्दे