2013-02-06 43 views
0

我正在創建一個批處理文件,用於從IP地址恢復數據庫,然後在數據庫上執行一對.sql文件。在幾個.sql文件中有變量聲明和設置。但是這個過程必須在每臺機器上的每個變量具有不同值的許多機器上完成。是否有批處理腳本命令,我可以在.sql文件中更改變量值?

所以我能夠通過IP的用戶輸入來恢復數據庫,但我不知道如何使用批處理腳本命令來更改變量值。

例如,在一個.sql文件中,變量@store被聲明並設置爲某個隨機數。我想通過批處理文件更改該號碼。

我使用Windows和SQL Server Express 2008 R2

回答

1

如果你是一個Unix/Linux系統上工作,你可以使用sed搜索的字符串。

例子:假設你需要替換127.0.0.1192.168.1.1,您可以使用下面的指令:

$ sed 's/127.0.0.1/192.168.1.1/g' script.sql > newScript.sql 

這將取代舊的IP地址在script.sql,將保存這個腳本的副本newScript.sql

在windows上,我不知道該怎麼做,但是您可以隨時下載並安裝Cygwin以完成上述操作。

希望這可以幫助你。

+0

Cygwin的絕對unnessary得到GNU/Linux工具在Windows中。有幾個不需要Cygwin的本地端口 –

+0

@a_horse_with_no_name你知道在Windows中使用sed的另一種方式嗎?\ –

+1

@a_horse_with_no_name你可以和我們分享嗎?我是一個Linux用戶(和粉絲),但它會是很好的喲知道這些工具 – Barranka

4

您可以使用"scripting variables"和SQLCMD。

下面是從MSDN頁面的例子:

您還可以使用-v選項設置中存在的腳本中的腳本變量。在以下腳本中(文件名是testscript.sql),ColumnName是一個腳本變量。

USE AdventureWorks2012;
SELECT x.$(ColumnName)
FROM Person.Person x
WHERE c.BusinessEntityID < 5;

然後,您可以指定要使用-v選項返回的列的名稱:

sqlcmd -v ColumnName ="FirstName" -i c:\testscript.sql

要返回不同的列通過使用相同的腳本,更改ColumnName的值壓縮變量。

sqlcmd -v ColumnName ="LastName" -i c:\testscript.sql

+0

謝謝。這幫助了我。 – Alkey29

相關問題