我们在.sql文件中有一个SQL脚本。它有几个类似的参数

DECLARE @device_directory NVARCHAR(250) = '$(CONFIG_DBPATH)'+'$(CONFIG_DBNAME)'

然后,我们在.bat脚本中执行此脚本:

SET CONFIG_DBNAME=NewConfigBase
SET CONFIG_DBPATH=C:\BT_Server\
sqlcmd -I -S .\SQLEXPRESS8  -i SetUpConfigDb.sql

我已经分配了作为我们配置工具的一部分实现此功能的任务,即创建物理DB文件并将其附加到数据库中。稍后,我们还将包括创建数据库表,存储过程,ECT,这些过程当前在单独的.sql脚本中定义。

理想情况下,我希望配置工具不依赖SQLCMD,而是要执行程序内执行脚本(例如,使用SQLCommand)。这将使我可以使用标准错误处理(例外),而不是解析SQLCMD的输出。

现在,我有点不确定如何解决这个问题。我希望能够重新使用现有的SQL脚本,以便我们仍然可以使用.bat脚本而不维护两个不同的SQL查询执行相同的任务。

其中一个脚本包含在几个地方。我的理解是,SQLCommand不允许这样做。我也不确定可以使用SQLParameter设置$(config_dbpath)等的值(实际上我几乎可以肯定我不能)。

所以我的问题是,解决此情况的推荐方法是什么?如何使用其中执行.sql命令,以及如何指定变量,以便可以从.bat文件和托管代码中同时使用脚本?我想一个选项是从代码执行时“洗”脚本,删除go等,并修改如何处理变量。但是有更好的选择吗?

有帮助吗?

解决方案

如果要通过编程方式通过SQLCommand执行SQL脚本,则需要打开文件并按行读取该文件。当您通过每行时,将其附加到当前批处理字符串构建器上,当您碰到修剪后的一行时,请获得字符串构建器tostring并执行该批次。清除当前批次并继续前进。

编辑:关于参数的第二部分,您可以将它们作为解析和执行的一部分替换,或者可以将DBS(例如将DBS OUT OUT OUT of CORTION CODE)提取到C#代码。作为偏爱,我始终将SSMS和SQLCMD运行的SQL脚本保留,即使它们恰好由C#代码作为部署的一部分运行。因此,这意味着,我不会构成只有您的代码理解的任何特殊令牌。您可以按照问题的态度离开,替换它们,然后在脚本中更重要的是,将变量声明和评论 - 因此开发人员可以轻松地在SSM中使用。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top