2016-09-15 130 views
0

我正在使用一些我想要重用的SQL腳本,我需要使用一些變量。SQLCMD變量的路徑

具有運行與SQLCMD

sqlcmd -S <SERVER> -v PROJECT="<PROJECTNAME>" -i .\start.sql 

SQL腳本在start.sql腳本蝙蝠劇本,我執行另一個SQL腳本是這樣的:

:r .\<PROJECTNAME>\init.sql 

所以我硬編碼了變量的值和完美的作品。我想使用這個變量本身,但我無法讓它工作。

:r .\$(PROJECT)\init.sql 

這裏的最後一行是我認爲會工作的。我已經測試打印出變量PROJECT中的值:

PRINT '$(PROJECT)' 

這給了我變量的值。

希望任何人都可以幫助我使用該變量來執行文件夾中的腳本。

在此先感謝。

編輯: PRINT $(PROJECT)給出以下錯誤消息:名稱「XXX」在此上下文中是不允許的。有效表達式是常量,常量表達式和(在某些情況下)變量。列名不被允許。

XXX =變量的值。

+0

當你使用'PRINT $(PROJECT)'(沒有單引號)時,你會得到什麼? – artm

+0

你怎麼知道它不起作用?你收到錯誤信息了嗎?或者做了一件應該發生的事情不會發生?如果是這樣 - 什麼? – BeanFrog

+0

不,就是這樣,如果我使用:r。\ $(PROJECT)\ init.sql,它只是在沒有任何消息的情況下跳過它。但是將$(PROJECT)切換到變量值,它運行另一個腳本。 –

回答

1

我做了一個小實驗,因爲我知道我已經設法得到類似於此的語法在我之前爲我工作。我發現,如果我複製你做了什麼,我得到了以下錯誤:

A fatal scripting error occurred. Cannot find directory in the path specified for ":r" command.

相反,如果我把整個路徑到變量 - 它的工作原理。因此,嘗試改變你的.sql文件,以這樣的:

:r $(PROJECT_FILE_NAME) 

,並從SQLCMD調用它是這樣的:

sqlcmd -S <SERVER> -v PROJECT_FILE_NAME=".\<PROJECTNAME>\init.sql" -i .\start.sql 

當我把這個方法,它跑的文件init.sql沒有任何錯誤。

+1

我只是試過這個,它工作正常,如果我在變量中傳遞一個完整的路徑,但我不想在這種情況下做到這一點。我發現了另一個解決方案,可以在sqlcmd中如何連接變量。 **:r「。\」$(PROJECT)「\ register.sql」**這是在此論壇帖子https://social.msdn.microsoft標記的答案。COM /論壇/ SQLSERVER/EN-US/ce6b6277-340a-4900-814d-5714f74b411f/SQLCMD變量 - 串聯 - 行爲 - 爲什麼 - 是 - 它 - 這樣呢?論壇= sqltools –