Быстрый способ резервного копирования SQL SP и функций?
У меня длинный список SP (хранимая процедура) и функции на моем SQL-сервере db. Я мог бы сохранить их один за другим, щелкнув правой кнопкой мыши и установив скрипт XXX в Alter To. Есть ли какой-либо способ в TSQL запросить все SP и функции, чтобы сохранить их в xxx.sql-файлах?
Например, для sp_mySP1 я хотел бы сохранить его в sp_mySP1.sql, который является текстовым файлом. База данных слишком большая, и я бы хотел сохранить только SP и функции в качестве резервной копии исходных кодов.
В студии управления; найти базу данных, щелкнуть правой кнопкой мыши, задачи, сгенерировать скрипты;
next-next-next, пока не выберете «Типы объектов». Выберите «Хранимые процедуры» и «Пользовательские функции», затем «Выбрать все»; выбрать выход; идти!
1) Щелкните правой кнопкой мыши имя вашей базы данных в обозревателе объектов
2) Выберите «Задачи> Сгенерировать скрипты …» в контекстном меню
3) Выберите свою базу данных в списке и нажмите «Далее».
4) Нажмите «Далее» в опции «Выбор сценария»
5) В типах объектов проверьте сохраненные процедуры и пользовательские функции, нажмите «Далее»
6) Нажмите «Выбрать все» на экране «Сохраненные процедуры», нажмите «Далее».
7) Нажмите «Выбрать все» на экране «Выбор функций», нажмите «Далее».
8) Выберите «Script to New Query Window» и нажмите «Готово».
Вот процесс, который будет экспортировать некоторые типы данных.
if exists ( select * from sysobjects where name = 'ExportData_P' ) drop proc ExportData_P go CREATE PROC dbo.ExportData_P ( @tableName varchar(500), @where varchar(5000) = '(1=1)' ) AS BEGIN SET NOCOUNT ON DECLARE @sql varchar(8000) DECLARE @fieldList varchar(8000) DECLARE @valueList varchar(8000) SELECT @fieldList = '', @valueList = '' DECLARE @cols TABLE ( column_name nvarchar(250), data_type varchar(250) ) DECLARE @c nvarchar(250), @data_type varchar(250) INSERT INTO @cols select column_name, data_type from information_Schema.columns where table_name = @tableName WHILE EXISTS ( SELECT TOP 1 * FROM @cols ) BEGIN SELECT TOP 1 @c = column_name, @data_type = data_type FROM @cols SELECT @fieldList = @fieldList + @c + ', ', @valueList = @valueList + CHAR(13) + 'case when ' + @c + ' is null then ''NULL'' else '''''''' + ' + case when @data_type in ('text','ntext','char', 'nvarchar', 'varchar' ) then ' REPLACE ( REPLACE ( REPLACE ( ' else '' end + 'IsNull ( convert(varchar' + ( -- change this section to pass the length of varchar to convert case when @data_type in ( 'uniqueidentifier' ) then '(50)' when @data_type in ( 'text', 'ntext' ) then '(8000)' else '' end ) + ', ' + @c + '), '''' )' + -- end is null case when @data_type in ('text','ntext','char', 'nvarchar', 'varchar' ) then ', CHAR(39), CHAR(39)+CHAR(39) ), CHAR(13), '''' + CHAR(13) + ''''), CHAR(9), '''' + CHAR(9) + '''') ' else '' end + ' + '''''''' end + '', '' + ' DELETE FROM @cols WHERE column_name = @c END SELECT @fieldList = LEFT ( @fieldList, LEN(@fieldList)-1 ), @valueList = LEFT ( @valueList, LEN(@valueList)-1 ) SELECT @sql = 'select ''insert into ' + @tableName + ' (' + @fieldList + ') ' + ' VALUES ( ''+ ' + left ( @valueList, len(@valueList)-5) + ''') '' from ' + @tableName + ' WHERE ' + @where -- into [#mcoe_temp_export' + @tableName + '] print @sql EXEC ( @sql ) --EXEC ( 'select * from [#mcoe_temp_export' + @tableName + ']' ) SET NOCOUNT OFF END go
Используйте как:
exec ExportData_P 'tablename'
вы можете запросить syscomments, чтобы получить текст создания объекта sql, но я не знаю, как сохранить их все в отдельных файлах, используя только TSQL.
select * from syscomments