【问题标题】:SQLCMD :!! Dir producing no outputSQLCMD:!!目录没有输出
【发布时间】:2019-02-11 15:47:42
【问题描述】:

我在 Windows 7 的 cmd 提示符下启动 SQLCMD:

C:\>sqlcmd -S (localdb)\MSSQLLocalDB
1> :!! dir
2> go
1> quit

但我在控制台上看不到任何输出。认为这是一个菜鸟错误。我做错了什么?

【问题讨论】:

  • 您的问题得到解答了吗?如果是这样,请考虑将其标记为此类。

标签: sql-server cmd sqlcmd


【解决方案1】:

据我所知,该实用程序只是有一个错误。使用进程资源管理器观察它表明,当尝试运行命令时,它会通过将“C:\WINDOWS\system32\cmd.exe”附加到工作目录的任何内容来创建一个无效的 cmd.exe 路径。

因此,如果您从 C:\ 执行 sqlcmd,它将尝试运行 C:\"C:\WINDOWS\system32\cmd.exe",但由于路径无效而失败。

【讨论】:

    【解决方案2】:

    每次在 mysqlcmd 中手动输入命令时,都需要使用 go 跟随一行,这样它就会检测到命令的结尾并开始执行。很可能你会得到一个错误。

    【讨论】:

    • 试过了,不开心。我更新了原始帖子以展示我的工作和结果
    【解决方案3】:

    也许(localdb)\MSSQLLocalDB 在没有权限读取系统驱动器内容的帐户下运行?

    否则你会看到类似于:

     Volume in drive C is Windows
     Volume Serial Number is A866-F891
    
     Directory of 
    
    08-Feb-19  09:30    <DIR>          .
    08-Feb-19  09:30    <DIR>          ..
    15-Sep-18  10:06    <DIR>          0409
    23-Aug-16  14:12            21,007 07010000000000000000000000000000.tlbin
    17-Jan-19  09:55    <DIR>          1033
    15-Sep-18  08:29             2,151 12520437.cpx
    15-Sep-18  08:29             2,233 12520850.cpx
    15-Sep-18  08:29               232 @AppHelpToast.png
    ...
    

    【讨论】:

    • 我以本地管理员身份运行
    • LocalDB 始终在用户安全上下文下运行;也就是说,LocalDB 永远不会使用来自本地管理员组的凭据运行。 - docs.microsoft.com/en-us/sql/database-engine/configure-windows/…
    • 没关系。我的用户帐户在 Windows 系统管理员组中。此外,我在任何文件夹上都得到相同的结果,甚至 c:\temp
    • 文档说 LocalDB 省略了管理员权限,因此即使您的帐户是本地管理员,LocalDB 也不会使用该权限。文档中的另一个声明,也许它会更清楚 - 这意味着 LocalDB 实例使用的所有数据库文件必须可以使用拥有用户的 Windows 帐户访问,而不考虑本地管理员组的成员身份。 .所以这意味着,LocalDB 不能利用管理员权限来访问文件系统,我相信这是您观察到的 SQLCMD 行为的原因
    • 我想你可能想错了。 IIUC,当您使用 :!!命令,SQLCMD 只是将它传递给与调用它的上下文相同的 shell。
    猜你喜欢
    • 1970-01-01
    • 2012-03-08
    • 2018-11-23
    • 2010-12-03
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多