t-sql - 通过环境变量将空字符串值传递给 TSQL 脚本

标签 t-sql environment-variables sqlcmd dereference null-string

我有一个 DOS 批处理文件,我想用它来调用 TSQL 程序。 我想传递要使用的数据库的名称。这似乎有效。 我想传递我想要使用的表名称的前缀。 因此,对于测试表,我想传递前缀名称来使用测试表。

set svr=myserver
rem set db=myTESTdatabasename
set db=mydatabasename
rem set tp=TEST
set tp=
sqlcmd -S %svr% -d somename -i test01.sql

test01.sql 如下所示:

use $(db)
go

select top 10 * into $(db).dbo.$(tp)dsttbl from $(db).dbo.$(tp)srctbl

它对于测试内容工作得很好,但对于真实的内容,我只想将 tp 的值设置为 null,以便它将使用真实的表名称而不是伪造的表名称。

我这样做的原因是因为我不知道实际数据库中将使用的所有内容的名称。我试图使其通用,这样我就不必对一个非常大的 sql 程序进行一堆搜索替换(真正的 sql 程序已经有数百行)。

在测试用例中,这将解决

select top 10 * into myTESTdatabasename.dbo.TESTdsttbl from myTESTdatabasename.dbo.TESTsrctbl

对于生产运行,它应该解析为

select top 10 * into mydatabasename.dbo.dsttbl from mydatabasename.dbo.srctbl

问题似乎是它不喜欢 $(tp) 的空值,或者可能是它得到了一个 undefined variable 。

最佳答案

我尝试了一些语法,正如 Preet Sangha 指出的那样,您应该使用/V 命令行选项。

原因是在批处理脚本中将变量设置为空字符串 undefines it .

如果您想在批处理文件的顶部设置数据库名称,您仍然可以使用 set,如下所示:

set db_to_use=

然后您可以使用/V 选项在 sqlcmd 中使用此(未定义)变量:

sqlcmd -S %svr% -d somename -v db="%db_to_use%" -i test01.sql

...或者您可以直接在 sqlcmd 行中设置值:

sqlcmd -S %svr% -d somename -v db="" -i test01.sql

关于t-sql - 通过环境变量将空字符串值传递给 TSQL 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14738574/

相关文章:

sql - 如何在查询中选择包含多个项目的组?

python - 如何从子进程中获取环境?

php - 如何在 PHP 中设置 $PATH?

sql - 如何格式化 SQLCMD 输出

sql - 根据值聚合对行进行分组

sql-server - 带计数的 TSQL 分组

tsql - sqlcmd 未显示 RESTORE 数据库统计信息

sql-server-2005 - Sqlcmd生成的文件头下没有虚线,没有行数

sql-server - SQL - 从合并查询过滤器获取数据库名称

intellij-idea - 如何在 IntelliJ IDEA 中设置环境变量?