Ani*_*esh 15 sql-server ssms sqlcmd
我有下面的主脚本,它创建表,并插入一些数据,然后创建存储过程.
--todo_master.sql
use master
go
:r todo_create_ddl.sql
:r todo_create_dml.sql
:r todo_create_sprocs.sql
go
Run Code Online (Sandbox Code Playgroud)
但是,即使todo_master.sql与其他三个脚本位于相同的路径中,也无法找到这三个脚本.
我收到以下错误:
A fatal scripting error occurred.
The file specified for :r command was not found.
Run Code Online (Sandbox Code Playgroud)
如果我提供如下所示的完整路径,则会按预期找到并执行这些文件.
"C:\Docs and Settings\user\My Docs\SSMS\Projects\todo_create_ddl.sql"
我可能会失踪什么?
编辑 正如杰森所建议我试过这个,但仍然得到同样的错误:
use master
go
:setvar path "C:\Documents and Settings\user\My Documents\SQL Server Management Studio\Projects"
:setvar ddl "todo_create_ddl.sql"
:setvar dml "todo_create_dml.sql"
:setvar sprocs "todo_create_sprocs.sql"
:r $(path)$(ddl)
:r $(path)$(dml)
:r $(path)$(sprocs)
go
Run Code Online (Sandbox Code Playgroud)
Jas*_*and 26
您可以使用sqlcmd setvar选项为变量分配路径来解决此问题.然后在您的:r调用中使用该变量,如:
:setvar path "c:\some path"
:r $(path)\myfile.sql
Run Code Online (Sandbox Code Playgroud)
此链接有一个更深入的示例:http: //www.simple-talk.com/sql/sql-tools/the-sqlcmd-workbench/
有了这个,你可以删除setvar行并从命令行传入它:
Sqlcmd /Sserver /E -ddatabase -iInputfilename -oOutputfilename -v path=c:\somepath
Run Code Online (Sandbox Code Playgroud)
这可以解决脚本没有从调用第一个SQL脚本的目录运行的问题.
小智 5
我意识到这已经很老了,但我注意到你编辑的代码中有一个错误:你需要在路径和脚本名称之间加一个反斜杠.
:r $(path)\$(ddl)
:r $(path)\$(dml)
:r $(path)\$(sprocs)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
31616 次 |
| 最近记录: |