SSMS / SQLCMD批处理在子文件夹中创建所有存储过程

SSMS / SQLCMD batch to create all stored procedures within a sub-folder

我使用一些 SQLCMD 开发了以下 T-SQL 脚本来为他们​​的创建调用单独的存储过程脚本。存储过程位于子 Store Procedure\ 文件夹中(我想保留 space)。

它们可能是执行它的更好方法,但我想要一个创建数据库、tables、存储过程等的独特脚本(但使用文件)。

我既没有详细介绍数据库,也没有详细介绍 table 脚本。

/* Create database (I still have some issues with dropping it (existing connections) */

*/ Create tables with constraints... */

-- Is it possible to declare a relative path (here MY_PARENT_PATH is replaced by "c:\...")
:setvar STORE_PROCEUDRE_PATH "[MY_PARENT_PATH]\Stored Procedures"

-- Calls CRUD stored procedures from separate scripts via SQLCMD - is it possible to batch it with all spXXX_XXXX.sql files included in the sub-folder?
:r $(STORE_PROCEUDRE_PATH)\spFields_Create.sql
:r $(STORE_PROCEUDRE_PATH)\spFields_Read.sql
:r $(STORE_PROCEUDRE_PATH)\spFields_Update.sql
:r $(STORE_PROCEUDRE_PATH)\spFields_Delete.sql

-- Idem for other table, such as Features, Values, etc.

是否可以循环 Store Procedure\ 文件夹中的所有文件 spXXX_XXXX.sql 文件并执行 :r $(STORE_PROCEUDRE_PATH)\spXXX_XXXX.sql 脚本?

我看到了几篇文章,其中展示了使用 FOR 构造的示例,但我感到困惑。

感谢您的任何见解:-)

是的,有办法, SQLCMD 无法遍历文件,但您可以使用 Windows 批处理脚本来完成。

这里有一篇关于如何操作的好博客: SQLCMD and Batch File magic

所以基本上你需要制作一个 .bat 文件,例如:CRUDE.bat 并编辑并粘贴下面的代码并保存,

@@echo off
cd "[MY_PARENT_PATH]\Stored Procedures"

FOR %%A IN (*.SQL) DO ( sqlcmd -S [SERVERNAME] -d [DATABASE] -U [][username -P password] -i "%%A")

您需要用您的值替换这些值:

MY_PARENT_PATH : 您的子订单所在的路径或目录。

SERVERNAME:您的数据库服务器名称。

DATABASE1:您的数据库名称。

用户名:您的 SQL 用户名。

密码:您的SQL密码。

现在您可以 运行 批处理文件了,它很神奇。

另外 here 您可以了解更多关于 SQLCMD 实用程序