SQL Server数据库项目:为什么不支持命令执行
我正在尝试为Visual Studio SQL数据库项目复制预部署脚本中的文件SQL Server数据库项目:为什么不支持命令执行,sql,sql-server,visual-studio,tsql,Sql,Sql Server,Visual Studio,Tsql,我正在尝试为Visual Studio SQL数据库项目复制预部署脚本中的文件 :!!copy $(DataFileDirectory)\data.csv $(DataDestinationDirectory) 我发现这产生了错误: SQL72007:语法检查失败“附近的语法不正确”。在批处理中靠近:':!!抄袭 因此,我尝试简化测试,并尝试: :!! dir 这也失败了: SQL72007:语法检查失败“附近的语法不正确”。在批处理中靠近:':!!迪尔 当我尝试时,它失败了: !! dir
:!!copy $(DataFileDirectory)\data.csv $(DataDestinationDirectory)
我发现这产生了错误:
SQL72007:语法检查失败“附近的语法不正确”。在批处理中靠近:':!!抄袭
因此,我尝试简化测试,并尝试:
:!! dir
这也失败了:
SQL72007:语法检查失败“附近的语法不正确”。在批处理中靠近:':!!迪尔
当我尝试时,它失败了:
!! dir
我能够执行以下命令:
:r .\myfile.sql
我注意到每当我执行时都会出现以下错误:代码>,
72006:致命脚本错误:不支持命令执行
为什么不支持命令执行(:!!
) 当然,只有SSDT的设计者才能真正回答这个问题,但你可以做出一个有根据的猜测:这会对系统安全造成太大的危害。它允许您在运行SQL server本身的用户的帐户下,在数据库服务器的操作系统上运行任意命令
sqlcmd.exe
命令允许禁用:
和:出于同样的原因,使用-X
命令行选项编辑
命令
如果您确实需要在脚本中运行操作系统命令,您仍然可以回退到xp\u cmdshell
,这当然也有问题,但至少服务器管理员可以决定是否允许这样做
还有更多的SQLCMD语法选项,SSDT部署前或部署后脚本都不支持(例如,或者,看起来)。因此,另一种解释是,为了部署脚本的目的,:r
和:setvar
命令被认为是足够的。当然,这只能由SSDT的设计者来回答,但你可以做出一个有根据的猜测:这会对系统安全造成太大的危害。它允许您在运行SQL server本身的用户的帐户下,在数据库服务器的操作系统上运行任意命令
sqlcmd.exe
命令允许禁用:
和:出于同样的原因,使用-X
命令行选项编辑
命令
如果您确实需要在脚本中运行操作系统命令,您仍然可以回退到xp\u cmdshell
,这当然也有问题,但至少服务器管理员可以决定是否允许这样做
还有更多的SQLCMD语法选项,SSDT部署前或部署后脚本都不支持(例如,或者,看起来)。因此,另一种解释是,对于部署脚本而言,:r
和:setvar
命令被认为是足够的