我的SQL服务器数据库中有很长的SP(存储过程)和函数列表。我可以通过右键单击并将XXX脚本改为Alter To来逐个保存它们。 TSQL中是否有任何方法可以查询所有SP和函数,将它们保存为xxx.sql文件?
例如,对于sp_mySP1,我想将其保存到sp_mySP1.sql,这是一个文本文件。数据库太大了,我想只保存SP和函数作为源代码的备份。
答案 0 :(得分:24)
在管理工作室;找到数据库,右键单击,任务,生成脚本;
next-next-next直到你“选择对象类型”。选择“存储过程”和“用户定义的函数”,然后选择全部;选择输出;去!
答案 1 :(得分:4)
1)在对象资源管理器中右键单击数据库名称
2)从上下文菜单中选择“任务>生成脚本...”
3)在列表中选择您的数据库,然后单击下一步
4)单击Chose Script Options
上的Next5)在对象类型中,选中存储过程和用户定义的函数,单击下一步
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