TSQLプログラムを呼び出すために使用したいDOSバッチファイルがあります。使用するデータベースの名前を渡したい。これはうまくいくようです。使用するテーブルの名前にプレフィックスを渡したい。したがって、テストテーブルの場合、テストテーブルを使用するためにプレフィックスの名前を渡します。
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)のnull値が気に入らないか、未定義の変数を取得しているようです。