我有一个 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) 的空值,或者它可能得到一个未定义的变量。