2013-02-22 84 views
0

我正在嘗試複製Visual Studio SQL數據庫項目的預部署腳本中的文件。SQL Server數據庫項目:爲什麼命令執行不受支持

:!!copy $(DataFileDirectory)\data.csv $(DataDestinationDirectory) 

我發現,這所產生的錯誤:

SQL72007: The syntax check failed 'Incorrect syntax near .' in the batch near: ':!!copy

於是,我就簡化了我的測試,並試圖:

:!! dir 

這也失敗:

SQL72007: The syntax check failed 'Incorrect syntax near .' in the batch near: ':!! dir

當我嘗試時失敗:

!! dir 

我能夠像執行命令:

:r .\myfile.sql 

我注意到,每當我做:!!出現以下錯誤,

72006: Fatal scripting error: Command Execute is not supported.

爲什麼命令執行(:!!)不支持? !

回答

4

這當然只能由SSDT的設計者真正回答,但是你可以做出有根據的猜測:它會危及系統安全。它將允許您在運行SQL Server的用戶帳戶下運行數據庫服務器的操作系統上的任意命令。

由於相同的原因,sqlcmd.exe命令允許使用-X命令行選項來禁用:!!:ed命令。

如果您確實需要在您的腳本中運行OS命令,您仍然可以回退到xp_cmdshell,這當然也有問題,但至少服務器的管理員可以決定是否允許。

還有很多SQLCMD語法選項,即SSDT預部署或後部署腳本不支持(例如,看起來像是:connect:on error)。所以,另一種解釋是,爲了部署腳本,:r:setvar命令被認爲是足夠的。

相關問題