2008-12-03 22 views
5

SQL 2005'te, tüm saklı yordamlarımı bireysel .sql dosyalarına dağıtmak için basit bir işlem var mı. Onları VSS'ye taşımak istiyorum, ama kaynak metin almak için her birine tıklatma olasılığı ile çok heyecanlı değilim ve bir metin dosyasına döküyoruz ..Saklanan Yordamlar .sql dosyaları

cevap

13

SQL Management Studio'da veritabanına sağ tıklayın, görevlere gidin -> Script Oluştur, sihirbazın adım adım ilerlemesi. Sayfalardan biri, her bir nesneyi kendi dosyasına kopyalamanıza izin verecektir.

5

Bu select'i çalıştırabilirsiniz:

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' 

ve saklı yordamların adını ve kaynak kodunu alırsınız. Şüphesiz en kolay yol, dosyalara nasıl yerleştirileceği, bazı "klasik" C#, java, vb. Gibi dilde…

+0

Nice'i! Bunu bilmiyordum. – VVS

3

Tüm veritabanınızın sürümünü kullanmak istiyorsanız, Microsoft'un bir SQL Server Veritabanı Yayımlama Sihirbazı vardır (bunu here karşıdan yükleyebilirsiniz). Genel bakış, Visual Studio'yla doğrudan bütünleşmenin olduğunu söylüyor, ancak ne kadar iyi (veya kötü) olabileceğini kefil etmek için kişisel olarak kullanmadım.

2

Veritabanı nesnesi başına tek bir .sql dosyası oluşturma seçeneği bulunan SMOscript adlı bir araç yazdım.

CREATE ve DROP komut dosyaları oluşturmak için SQL Server'ın SMO kütüphanesini kullanır.

1

Sql Server SMO'u kullanmayı deneyin. Bir örnek aşağıda bulunmaktadır:

//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

Ayrıca, farklı bir .sql dosyası seçilen veritabanı saklı yordam komut dosyaları oluşturmak için aşağıdaki komut dosyasını kullanabilirsiniz, dosyalar prosedürün adıyla oluşturmak olacaktır.

dinamik sorgu ve imleci kullanarak, bunu şöyle yapabilirsiniz:

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 
İlgili konular