【发布时间】:2011-11-16 06:06:40
【问题描述】:
我必须从特定数据库下载所有存储过程。
大约有 130 个存储过程,我可以手动完成,就像每个都保存为文件一样。
但是有没有自动下载全部的选项?
【问题讨论】:
标签: sql sql-server stored-procedures
我必须从特定数据库下载所有存储过程。
大约有 130 个存储过程,我可以手动完成,就像每个都保存为文件一样。
但是有没有自动下载全部的选项?
【问题讨论】:
标签: sql sql-server stored-procedures
1) 打开 SQL Server Management Studio 2) 在对象资源管理器中选择您的数据库 3)右键单击>任务>生成脚本
4) 只选择要编写脚本的存储过程
5) 按照向导完成步骤;在下一个屏幕上,选择选项 Single file per object 并定义放置这些文件的目录:
使用这些选项,您将获得每个存储过程一个文件,存储在您选择的目录中。
【讨论】:
您可以在 Management Studio 中执行此操作 - 右键单击所需的数据库并选择任务 -> 生成脚本 -> 完成向导。然后,您可以只指定存储过程等。
你也可以使用这样的脚本:
SET NOCOUNT ON
DECLARE @Test TABLE (Id INT IDENTITY(1,1), Code VARCHAR(MAX))
INSERT INTO @Test (Code)
SELECT 'IF object_ID(N''[' + schema_name(schema_id) + '].[' + Name + ']'') IS NOT NULL
DROP PROCEDURE ['+ schema_name(schema_id) +' ].[' + Name + ']' + CHAR(13) + CHAR(10) + 'GO' + CHAR(13) +CHAR(10) +
OBJECT_DEFINITION(OBJECT_ID) + CHAR(13) +CHAR(10) + 'GO' + CHAR(13) + CHAR(10)
FROM sys.procedures
WHERE is_ms_shipped = 0
DECLARE @lnCurrent INT, @lnMax INT
DECLARE @LongName VARCHAR(MAX)
SELECT @lnMax = MAX(Id) FROM @Test
SET @lnCurrent = 1
WHILE @lnCurrent <= @lnMax
BEGIN
SELECT @LongName = Code FROM @Test WHERE Id = @lnCurrent
WHILE @LongName <> ''
BEGIN
PRINT LEFT(@LongName,8000)
SET @LongName = SUBSTRING(@LongName, 8001, LEN(@LongName))
END
SET @lnCurrent = @lnCurrent + 1
END
您也可以按住 shift+单击来选择所有存储过程,然后您可以右键单击并将它们写入文件。
【讨论】:
您也可以使用 DB pro(用于数据库的 Visual Studio 工具)来执行此操作。 欲了解更多信息,请查看 - https://www.mssqltips.com/sqlservertip/2971/creating-a-visual-studio-database-project-for-an-existing-sql-server-database/
编辑:更新了陈旧的链接。
【讨论】: