2008-12-03 8 views
5

Простой процесс в SQL 2005 для переноса всех моих хранимых процедур в отдельные файлы .sql. Я хотел бы переместить их в VSS, но я не слишком взволнован перспективой щелчка по каждому из них, чтобы получить источник, сбросив его в текстовый файл и т. Д.Сохраненные процедуры для .sql-файлов

ответ

13

В SQL Management Studio щелкните правой кнопкой мыши по базе данных, перейдите к задачам -> Сгенерировать скрипты, пройдите мастер. Одна из страниц позволит вам сценарий каждого объекта в свой собственный файл.

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' 

и вы получите имя и исходный код хранимых процедур. Упрощенный самый простой способ, как поместить его в файлы, находится в некотором «классическом» языке, например, C#, java и т. Д.

+0

Ницца! Не знал об этом. – VVS 2008-12-03 17:59:02

3

Если вы хотите обновить всю базу данных, Microsoft имеет мастер публикации базы данных SQL Server (вы можете скачать его here). В обзоре говорится, что есть прямая интеграция с Visual Studio, но я не использовал его лично, чтобы ручаться за то, насколько он хорош (или плох).

2

Я написал инструмент, который я назвал SMOscript, который имеет возможность создать один файл .sql для каждого объекта базы данных.

Он использует библиотеку SMO SQL Server для генерации сценариев CREATE и DROP.

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 
Смежные вопросы