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

时间:2019-04-27 14:47:41

标签: sql-server sqlcmd

我已经阅读了很多有关该错误的文章和文章:

  

共享内存提供程序:管道的另一端没有进程。   通信链接失败。

...包括以下内容:

Error message: (provider: Shared Memory Provider, error: 0 - No process is on the other end of the pipe.)

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

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

这是我从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"

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

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

最重要的一点:这必须与我的输入文件有关,该文件超过200 Mb。当我运行与上述相同的cmd-line语句,而指向test.sql时,该语句只包含select getdate(),因此它运行良好。没有错误,没有连接问题。

经过一切尝试,我永远都遇到同样的错误。我还能尝试什么?

3 个答案:

答案 0 :(得分:1)

按照@HerrimanCoder的建议,-a 32767参数解决了这个问题,在我的情况下,我正在运行一个脚本2个脚本,分别为1.4GB和1.6GB。

我在个人计算机上安装了SQL Server 2019的全新安装。它没有启用命名管道和TCP / IP,我将它们打开,再次尝试,失败,然后添加参数并顺利执行。

感谢您的帮助。

答案 1 :(得分:0)

由于this post,我终于知道了。我不得不添加-a 32767作为cmd行参数,大概是因为我的输入脚本很大。地狱sqlcmd可以给出更真实的错误消息,而不是假装它无法连接。连接从来都不是问题。无论如何,我希望这可以帮助其他人。

答案 2 :(得分:0)

我经历了同样的事情,我尝试启用TCP IP,共享内存和名称管道,这对我没有帮助,我遵循的是这个medium post

enter image description here

它说要添加一个参数,它对我很有用,请检查所有步骤。