Быстрый способ резервного копирования SQL SP и функций? - PullRequest
10 голосов
/ 02 апреля 2009

У меня длинный список SP (хранимых процедур) и функций в моей базе данных SQL-сервера. Я мог бы сохранить их один за другим, щелкнув правой кнопкой мыши и написав XXX для Alter To. Есть ли способ в TSQL для запроса всех SP и функций сохранить их в файлы xxx.sql?

Например, для sp_mySP1 я хотел бы сохранить его в sp_mySP1.sql, который является текстовым файлом. База данных слишком большая, и я хотел бы сохранить только SP и функции в качестве резервной копии исходных кодов.

Ответы [ 4 ]

24 голосов
/ 02 апреля 2009

в студии управления; найти базу данных, щелкнуть правой кнопкой мыши, задачи, сгенерировать сценарии;

следующий-следующий-следующий, пока вы не выберете «Типы объектов». Выберите «Хранимые процедуры» и «Пользовательские функции», затем выберите «Все»; выберите выход; идти!

4 голосов
/ 02 апреля 2009

1) Щелкните правой кнопкой мыши на имени вашей базы данных в обозревателе объектов

2) Выберите «Задачи> Создать сценарии ...» из контекстного меню

3) Выберите вашу базу данных в списке и нажмите Далее

4) Нажмите Далее в опциях выбора сценариев

5) В разделе «Типы объектов» выберите «Хранимые процедуры и пользовательские функции», нажмите «Далее»

.

6) Нажмите «Выбрать все» на экране выбора «Хранимые процедуры», нажмите «Далее»

7) Нажмите «Выбрать все» на экране выбора функций, нажмите «Далее»

8) Выберите «Сценарий для нового окна запроса» и нажмите «Готово»

3 голосов
/ 02 апреля 2009

Вот процесс, который будет экспортировать некоторые типы данных.

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'
1 голос
/ 02 апреля 2009

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

select * from syscomments
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...