SQL 定期将所有存储过程导出到文件的作业

SQL job to regularly export all stored procedures to file

作为在 SQL 服务器上进行定期 SQL 备份的次要预防措施,我希望能够将所有存储过程、函数和触发器导出到一个文件中。这样,万一发生真正灾难性的事情,我们至少将所有代码分开存储。我知道我可以通过 SSMS 及其导出向导手动生成这些脚本。然而,由于我们的代码可能会经常更改,我希望能够设置一个夜间作业,将所有程序导出到一个 .sql 文件,以便我们始终拥有最新的副本。

我进行了一些搜索,但似乎无法找到或想出一种方法来自动执行此操作。任何帮助将不胜感激。

您可以从针对 sys.sql_modules 的查询中获取过程定义,并使用 BCP 导出查询结果。但是,是的,源代码控制会更好。您当然可以通过 bcp 导出并添加一些 git 命令来推送输出文件。

我在这里加入 sql_modulesprocedures 以将查询限制为仅存储过程定义以演示该技术,但如果需要,您也可以获得其他模块。当然,您可以添加其他过滤器...按架构,随便什么。

bcp "select definition from sys.sql_modules m join sys.procedures p on p.object_id = m.object_id" queryout f:\procs.txt -SMyServer -dMyDatabase -T -c

此命令将使用集成安全性 (-T)。您可以改用 SQL 身份验证。 -c 是“以制表符作为列分隔符的字符数据(此处无关紧要,因为我们只得到一列)和 \r\n 作为行分隔符”的快捷方式

在 sql 代理作业中坚持使用 cmdexec 作为步骤类型,根据需要进行安排。