sqlcmd.exe - 共享内存提供程序:管道的另一端没有进程

Her*_*der 3 sql-server sqlcmd

我已经阅读了许多关于该错误的帖子和文章:

共享内存提供程序:管道的另一端没有进程。通信链路故障。

...包括这些:

错误消息:(提供程序:共享内存提供程序,错误:0 - 管道的另一端没有进程。)

https://blog.sqlauthority.com/2009/05/21/sql-server-fix-error-provider-named-pipes-provider-error-40-could-not-open-a-connection-to-sql-服务器-microsoft-sql-server-error/

我可以轻松且始终通过 SSMS 进行连接,包括混合模式和 Windows 身份验证。但是每当我尝试通过 运行 sql 脚本时sqlcmd.exe,都会出现上面显示的错误。

这是我从 Windows 命令外壳运行的内容:

"C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\170\Tools\Binn\sqlcmd.exe" -S localhost -U sa -P myPassword -i "F:\<mypath>\<myfile>.sql"
Run Code Online (Sandbox Code Playgroud)

这是我尝试/验证的内容:

  1. 我在跑步 SQL Server version 14.0在 Windows 10 上。
  2. 启用了混合模式身份验证,我可以从 SSMS 连接。
  3. 我试过指定127.0.0.1而不是localhost在我的 cmd 行中。
  4. 共享内存协议已启用。
  5. 命名管道协议已启用。
  6. TCP/IP 已启用。
  7. 我的 SQL Server 服务正在运行 - 我可以从 SSMS 连接。
  8. 我在 Windows 防火墙中打开了入站和出站端口 1433,我的防火墙允许 SQL Server(作为应用程序)。(即使我关闭防火墙,我仍然会遇到同样的错误。)
  9. 远程连接已启用。
  10. SQL Server Browser 服务已启用并正在运行。
  11. SQL Server 代理已启用并正在运行(尽管我认为这没有必要)。
  12. 我已经重新启动了 SQL Server 服务并重新启动了几次。

最重要:这一定与我的输入文件有关,它超过 200 Mb。当我运行与上面相同的 cmd-line 语句,但指向 时,它只test.sql包含select getdate(),它工作得很好。没有错误,没有连接问题。

在我尝试了一切之后,我永远得到同样的错误。我还能尝试什么?

Her*_*der 8

多亏了这篇文章,我终于想通了。我不得不添加-a 32767一个 cmd-line 参数,大概是因为我的输入脚本很大。Infernalsqlcmd可以给出更真实的错误消息,而不是假装它无法连接。连接从来都不是问题。无论如何,我希望这可以帮助别人。