快速备份SQL SP和函数的方法?

时间:2009-04-01 21:02:36

标签: sql sql-server tsql

我的SQL服务器数据库中有很长的SP(存储过程)和函数列表。我可以通过右键单击并将XXX脚本改为Alter To来逐个保存它们。 TSQL中是否有任何方法可以查询所有SP和函数,将它们保存为xxx.sql文件?

例如,对于sp_mySP1,我想将其保存到sp_mySP1.sql,这是一个文本文件。数据库太大了,我想只保存SP和函数作为源代码的备份。

4 个答案:

答案 0 :(得分:24)

在管理工作室;找到数据库,右键单击,任务,生成脚本;

next-next-next直到你“选择对象类型”。选择“存储过程”和“用户定义的函数”,然后选择全部;选择输出;去!

答案 1 :(得分:4)

1)在对象资源管理器中右键单击数据库名称

2)从上下文菜单中选择“任务>生成脚本...”

3)在列表中选择您的数据库,然后单击下一步

4)单击Chose Script Options

上的Next

5)在对象类型中,选中存储过程和用户​​定义的函数,单击下一步

6)在“存储过程”选择屏幕上单击“全选”,然后单击“下一步”

7)在功能选择屏幕上单击全选,然后单击下一步

8)选择“脚本到新查询窗口”,然后单击“完成”

答案 2 :(得分:3)

这是一个将导出某些类型数据的proc。

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'

答案 3 :(得分:1)

您可以查询syscomments以获取您的sql对象创建文本,但我不知道如何使用TSQL将它们全部保存在单独的文件中。

select * from syscomments