数据库
首页 > 数据库> > sql-server – 如何在Linux上使用sqlcmd连接到SQL Server?

sql-server – 如何在Linux上使用sqlcmd连接到SQL Server?

作者:互联网

我在Ubuntu 16.04计算机上为SQL Server设置了Microsoft ODBC Driver 13.我现在正在尝试测试数据库连接,包括服务器名称和实例名称.

以下两者都可以在Windows机器上正常工作:

sqlcmd -S "SERVERNAME\INSTANCENAME" -U User -P pwd -d DatabaseName -Q "SELECT TOP 5 Id FROM dbo.MyTable;"
sqlcmd -S SERVERNAME\INSTANCENAME -U User -P pwd -d DatabaseName -Q "SELECT TOP 5 Id FROM dbo.MyTable;"

但是它们都不能在Linux上运行 – 它们都会返回下面的错误消息.该错误意味着无法找到服务器:

Sqlcmd: Error: Microsoft ODBC Driver 13 for SQL Server : Login timeout expired.
Sqlcmd: Error: Microsoft ODBC Driver 13 for SQL Server : MAX_PROVS: Error Locating Server/Instance Specified [xFFFFFFFF]. .
Sqlcmd: Error: Microsoft ODBC Driver 13 for SQL Server : A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online..

我也尝试使用相同的错误(以及单引号和双引号)转义反斜杠.

sqlcmd -S "SERVERNAME\\INSTANCENAME" -U User -P pwd -d DatabaseName -Q "SELECT TOP 5 Id FROM dbo.MyTable;"
sqlcmd -S SERVERNAME\\INSTANCENAME -U User -P pwd -d DatabaseName -Q "SELECT TOP 5 Id FROM dbo.MyTable;"

然而,驱动程序正在工作,因为我可以连接到没有实例名称的其他服务器:

sqlcmd -S SERVERNAME -U User -P pwd -d DatabaseName -Q "SELECT TOP 5 Id FROM dbo.MyTable;"

我相当肯定这是由于反斜杠,但无法找到解决这个问题的方法.

解决方法:

在Dan Guzman的评论的帮助下,我得到了使用端口的连接.

我有一台带有SQL Management Studio的Windows机器连接到相关数据库,并使用:

netstat -abn

然后我搜索了ssms.exe以获取连接详细信息:

TCP    192.168.0.31:50777     192.168.0.78:49399     ESTABLISHED [Ssms.exe]

或者,登录数据库服务器并查看SQL Server配置管理器中实例使用的端口(SQL Server网络配置> INSTANCENAME协议> TCP / IP>属性> IPAll TCP动态端口).

以下两者都有效:

sqlcmd -S 192.168.0.78,49399 -U User -P pwd -d DatabaseName -Q "SELECT TOP 5 Id FROM dbo.MyTable;"
sqlcmd -S SERVERNAME,49399 -U User -P pwd -d DatabaseName -Q "SELECT TOP 5 Id FROM dbo.MyTable;"

标签:sql-server,linux,ubuntu,sqlcmd
来源: https://codeday.me/bug/20190806/1597260.html