如何从特定数据库下载所有存储过程

Neo*_*Neo 9 sql sql-server stored-procedures

我必须从特定数据库下载所有存储过程.

大约有130个存储过程,我可以手动完成,就像每个文件一样保存.

但有没有自动选项下载所有?

mar*_*c_s 23

1)打开SQL Server Management Studio 2)在对象资源管理器中选择数据库3)右键单击>任务>生成脚本

在此输入图像描述

4)仅选择要编写的存储过程

在此输入图像描述

5)按照向导完成步骤; 在下一个屏幕上,选择选项Single file per object并定义放置这些文件的目录:

在此输入图像描述

使用这些选项,每个存储过程可以获得一个文件,存储在您选择的目录中.


Cod*_*ian 6

您可以在管理工作室中执行此操作 - 右键单击​​所需的数据库并选择任务 -> 生成脚本 -> 完成向导。然后,您可以仅指定存储过程等。

您还可以使用这样的脚本:

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
Run Code Online (Sandbox Code Playgroud)

您还可以通过 shift+click 选择所有存储过程,然后您可以右键单击并将它们编写为文件。