2013-02-06 27 views
2

我有一個DOS批處理文件,我想用來調用一個TSQL程序。 我想傳遞要使用的數據庫的名稱。這似乎工作。 我想通過PREFIXES我想要使用的表的名稱。 因此對於測試表,我想傳遞一個前綴的名稱來使用測試表。通過環境變量傳遞空字符串值到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),或者它可能會得到一個未定義的變量。

+1

什麼RHE「再al table「是什麼意思?你的意思是dbo架構。在這種情況下,只需設置tp = dbo。另外[將sqlcmd與腳本變量一起使用](http://msdn.microsoft.com/zh-cn/library/ms188714.aspx):/ V命令行選項是否有效? –

+0

很好的問題。讓我編輯來清除那個。 – elbillaf

+0

也許這更清楚。 – elbillaf

回答

2

我試驗了一些語法,因爲Preet Sangha指出你應該使用/ V命令行選項。

原因是在批處理腳本undefines it中將空變量設置爲空字符串。

如果你想在批處理文件就可以了還是頂部設置數據庫名稱中使用集,這樣的:

set db_to_use= 

然後你可以使用使用這個(未定義)變量在SQLCMD/-v選項:

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

...或者你可以在SQLCMD線設置的值直接:

sqlcmd -S %svr% -d somename -v db="" -i test01.sql 
相關問題