Sqlcmd错误:Microsoft SQL Server Native Client 10.0: 通信链路故障

5

下面是一些Windows命令提示符命令,我正在尝试从64位程序文件夹中调用这些命令,以便使用Microsoft SQL Server 2008。

C:\Program Files\Microsoft SQL Server\100\Tools\Binn>SQLCMD -S "SQLI2B2" -d
 "I2B2_CRC-DEV" -i "C:\SVN\ONT\SQL SERVER\DX_SQLSERVER.sql" -E

Sqlcmd: 错误: Microsoft SQL Server Native Client 10.0 : 通信链接失败。

c:\Program Files\Microsoft SQL Server\100\Tools\Binn>

现在,我要连接的数据库(服务器)是SQL Server 2008。在“Microsoft SQL Server”文件夹下面有几个目录,分别是90、100、110和120。只有100和110中有.\Tools\Binn\SQLCMD.EXE文件。在\\控制面板\所有控制面板项目\管理工具\数据源(ODBC)\驱动程序\中,我注意到以下驱动程序,所以我不知道客户端驱动程序是否适用于我的服务器版本。

Name                            Version
SQL Server                      6.01.7601.17514
SQL Server Native Client 10.0   2009.100.1600.01
SQL Server Native Client 11.0   2011.110.3000.00

命令中的-E表示使用Windows身份验证,而不是SQL Server身份验证(使用实际的用户名和密码)。
这个错误的原因是什么,如何修复呢?
注意:
该问题出现在Windows 7上。以下解决方案仅适用于早期操作系统。 https://msdn.microsoft.com/en-us/library/ms187005.aspx

1
我有一个242MB大小的脚本,其中包含超过850K个插入语句。我只是通过在每个插入语句后添加一个GO语句来修改了该脚本。因此,总行数变为1,700K。然后sqlcmd实用程序成功运行了。如果没有GO语句,我会收到错误消息 -“TCP提供程序:远程主机强制关闭了现有连接。通信链路故障”。 - Varun Sharma
可能是同一个错误的原因略有不同。有趣。这些INSERT语句是针对同一张表还是不同的表? - Entree
是的,它们都是针对同一张表的。 - Varun Sharma
1
我不知道为什么你会遇到相同的错误,但是你可以通过执行批量插入命令来提高查询性能/速度,意思是在命令的VALUES部分中放置多个记录。例如:INSERT INTO (x, y) VALUES (1,2) .. 批量的方式应该是 .. INSERT INTO (x, y) VALUES (1,2), (2,3); - Entree
4个回答

4

第一个错误:

TCP提供程序:远程主机强制关闭了现有的连接。

通信链路失败

较小的文件可以正常运行,但如果文件太大,您仍将收到此异常。 我找到的唯一解决方案是将包含T-SQL命令的文件分成多个较小的文件。

第二个错误:

Sqlcmd: 错误: Microsoft SQL Server Native Client 10.0 : 通信链路失败

除了可执行文件本身之外,"Binn"文件夹中必须还有SQLCMD.EXE运行所需的其他文件。 要么将其附加到现有的SYSTEM "PATH"环境变量,要么在 \\控制面板\所有控制面板项\系统\高级系统设置\环境变量\ 中添加新的USER "PATH"环境变量。

Variable name: PATH
Variable value: C:\Program Files\Microsoft SQL Server\100\Tools\Binn\

希望能有另一种解决方法,当我加载一个300MB的SQL插入脚本时,出现了这个错误,将文件分成较小的块后,错误消失了。这是使用sqlcmd 15.0.2000.5版本。 - undefined

1

Varun Sharma在第一个回答中提到,他在每行之后添加了一个GO语句。那太多了。我每1000行添加一个GO语句,这对我有效。


我在Linux客户端遇到了这个问题。结果发现一次处理5,762,070条语句太多了。我的系统在出错之前最多只能处理大约1.5百万行。 - Aaron Mason

0

我因为SQL Server不喜欢我注释掉的一行SQL代码而遇到了这个错误。 我的建议是从最简单的代码开始验证,确保它不是连接问题,然后逐步进行调试。

被注释掉的那行代码是 --EXEC master..xp_cmdshell 'bcp ...,远程计算机没有运行权限。 在代码的后面有一行几乎相同的代码被接受了,所以我认为这是某种模糊的安全补丁错误。 你会认为注释掉的代码对连接问题没有影响,但事实并非如此。


0

[TCP提供程序:远程主机强制关闭了一个现有的连接。
Sqlcmd:错误:Microsoft SQL Server Native Client 10.0:客户端无法建立连接。 进程退出代码1。 步骤失败]

这对我来说很好用。 我安装了最新的SSMS,它安装了最新的SQL本机客户端,然后我映射了环境变量中的路径。 还要记得将新路径移动到前面,以便首先使用。 \控制面板\所有控制面板项\系统\高级系统设置\环境变量\


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接