首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过环境变量将空字符串值传递给TSQL脚本

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

Stack Overflow用户
提问于 2013-02-07 04:52:51
回答 1查看 1K关注 0票数 2

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

代码语言:javascript
复制
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如下所示:

代码语言:javascript
复制
use $(db)
go

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

对于测试内容,它工作得很好,但对于真正的内容,我只想将tp的值设置为null,这样它就会使用真实的表名而不是假的表名。

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

在测试用例中,这将解析为

代码语言:javascript
复制
select top 10 * into myTESTdatabasename.dbo.TESTdsttbl from myTESTdatabasename.dbo.TESTsrctbl

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

代码语言:javascript
复制
select top 10 * into mydatabasename.dbo.dsttbl from mydatabasename.dbo.srctbl

问题似乎是它不喜欢$(tp)的空值,或者可能是它得到了一个未定义的变量。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-03 14:34:47

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

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

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

代码语言:javascript
复制
set db_to_use=

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

代码语言:javascript
复制
sqlcmd -S %svr% -d somename -v db="%db_to_use%" -i test01.sql

...or您可以直接在sqlcmd行中设置该值:

代码语言:javascript
复制
sqlcmd -S %svr% -d somename -v db="" -i test01.sql
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14738574

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档