我可以用一个可执行脚本运行多(70)个SQL文件吗?

我可以用一个可执行脚本运行多(70)个SQL文件吗?,sql,r,ssms,Sql,R,Ssms,我通过Git/Stash管理70个SQL查询。为了方便起见,我将每个查询拆分为一个单独的SQL文件。在拆分之前,代码通过在第一个查询中声明所有变量并作为一个整体运行它们来工作。这些查询总共大约有10k行 我想写一个脚本(愿意学习),允许我连接到正确的数据库,声明一些通用变量,然后使用声明的变量调用文件夹中的所有不同文件 我最初的想法是使用R和RODBC包,但我希望在继续之前确保我走在正确的道路上。这可能吗?我应该改进我的方法吗?您可以在SQLCMD模式下运行脚本(在SSMS中,您可以从Query

我通过Git/Stash管理70个SQL查询。为了方便起见,我将每个查询拆分为一个单独的SQL文件。在拆分之前,代码通过在第一个查询中声明所有变量并作为一个整体运行它们来工作。这些查询总共大约有10k行

我想写一个脚本(愿意学习),允许我连接到正确的数据库,声明一些通用变量,然后使用声明的变量调用文件夹中的所有不同文件


我最初的想法是使用R和RODBC包,但我希望在继续之前确保我走在正确的道路上。这可能吗?我应该改进我的方法吗?

您可以在SQLCMD模式下运行脚本(在SSMS中,您可以从Query/SQLCMD模式启用它)

主脚本定义全局变量
@msg
,并运行与它们共享该变量的其他脚本:

:setvar path   "F:\scripts"

:on error exit

SET XACT_ABORT ON

declare @msg nvarchar(100) = 'This is a global variable defined in the main script.'

:r $(path)/"script_1.sql"
:r $(path)/"script_2.sql"
这两个脚本文件包含使用全局变量
@msg
的简单select语句

脚本_1.sql:

select @msg + ' And this comes from script_1.sql' as RESULTS_FROM_SCRIPT_1
脚本2.sql:

select @msg + ' And this comes from script_2.sql' as RESULTS_FROM_SCRIPT_2    
结果是:


您可以轻松地使用R循环文件,我一直使用RODBC包从SQL数据库创建和加载数据,所以我想答案是肯定的。是的,您可以,R不是必需的-我猜您选择R是因为您知道R语言。就我个人而言,我会选择PowerShell,因为它已经在Windows上,所以我不会添加额外的依赖项。但为您提供工作脚本超出了堆栈交换的范围/意图。