2

我有一个sql代码如下:

SET @FILEE = '..\mydb.sql';
DECLARE @cmd NVARCHAR(1000);
SET @cmd = 'SQLCMD -S (local)\MYSQL -i' + @FILEE
exec xp_cmdshell @cmd;

这总是给出一个错误:SqlCmd:'..\mydb.sql': invalid filename.

如果我输入类似的内容:C:\mydb.sql,它可以工作....但不适用于像上面这样的引用文件名..文件路径是参考当前文件的位置提到的。

有关如何解决此问题的任何指示?

如果没有,有没有办法引用vob位置?

4

2 回答 2

4

SQLCMD正确指定时将使用相对文件路径-您遇到的问题是xp_cmdshell开始的工作目录不是您期望的目录。

您可以通过运行以下命令来查看起始目录:

xp_cmdshell 'cd'

默认情况下,我认为这通常是操作系统\system32目录(通常C:\Windows\system32,但显然这可能会根据 Windows 安装的详细信息而有所不同)

您的解决方法是指定一个绝对路径(正如您已经发现的那样)或使用该CD命令切换到您要使用的相对路径正确的不同工作目录。

于 2013-05-29T08:40:27.163 回答
1

复活一个旧线程,希望它可以帮助像我这样的人。我在执行一个脚本时遇到了问题,该脚本又通过相对路径引用了其他脚本。

可以在 CMD 中链接命令。

假设您知道需要从哪个文件夹开始(例如 C:\myscripts),它将如下所示:

DECLARE @sql NVARCHAR(1000)
SELECT @sql = 'cd C:\myscripts && sqlcmd -S ' + @@SERVERNAME + ' -d ' + DB_NAME() + ' -i myscript.sql'
EXEC xp_cmdshell @sql
于 2018-11-28T02:44:28.660 回答