【问题标题】:SSMS / SQLCMD batch to create all stored procedures within a sub-folderSSMS / SQLCMD 批处理在子文件夹中创建所有存储过程
【发布时间】:2020-09-27 12:54:53
【问题描述】:

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

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

我既没有详细说明数据库,也没有详细说明表格脚本。

/* 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 构造的示例,但我感到困惑。

感谢您的任何见解:-)

【问题讨论】:

    标签: sql-server stored-procedures ssms


    【解决方案1】:

    是的,有办法, 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 实用程序的信息

    【讨论】:

    • 好的,谢谢,但是从另一个脚本调用 T-SQL 脚本显然不是那么简单。我仍然需要考虑它,因为据我了解 SQLCMD 是从 SSMS 外部正常执行的,对吧?我可能会直接从 Visual Studio 编写 SQL Server 项目中的所有内容。
    • 正确,但是如果您告诉我们您最初要解决的问题是什么,也许我们可以为您提供更好的帮助。
    猜你喜欢
    • 2015-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-23
    • 2011-12-01
    • 1970-01-01
    • 2020-04-23
    • 1970-01-01
    相关资源
    最近更新 更多