我们在 .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 文件并将其附加到数据库。稍后,我们还将包括当前在单独的 .sql 脚本中定义的数据库表、存储过程等的创建。
理想情况下,我希望配置工具不依赖于 sqlcmd,而是在进程中执行脚本(例如,通过使用 SqlCommand)。这将允许我使用标准错误处理(异常)而不是解析 sqlcmd 的输出。
现在我有点不确定如何解决这个问题。我希望能够重用我们现有的 sql 脚本,以便我们仍然可以使用我们的 .bat 脚本,而无需维护执行相同任务的两个不同的 sql 查询。
其中一个脚本在几个地方包含 GO。我的理解是 SqlCommand 不允许这样做。我也不确定是否可以使用 SqlParameter 来设置 $(CONFIG_DBPATH) 等的值(实际上我几乎可以肯定我不能)。
所以我的问题是,解决这种情况的推荐方法是什么?如何执行带有 GO 的 .sql 命令,以及如何指定变量以便可以从 .bat 文件和托管代码中使用脚本?我想一种选择是在从代码执行脚本时“清洗”脚本,删除 GO 等,并修改变量的处理方式。但是有没有更好的选择?