geo*_*ika 13 sql-server linux ubuntu sqlcmd
我已经在 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;"
Run Code Online (Sandbox Code Playgroud)
但是,它们都不适用于 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..
Run Code Online (Sandbox Code Playgroud)
我也试过用相同的错误(以及单引号和双引号)转义反斜杠。
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;"
Run Code Online (Sandbox Code Playgroud)
但是,驱动程序正在运行,因为我可以连接到没有实例名称的不同服务器:
sqlcmd -S SERVERNAME -U User -P pwd -d DatabaseName -Q "SELECT TOP 5 Id FROM dbo.MyTable;"
Run Code Online (Sandbox Code Playgroud)
我相当确定这是由于反斜杠造成的,但无法找到解决此问题的方法。
geo*_*ika 10
在 Dan Guzman 的评论的帮助下,我使用端口建立了连接。
我有一台带有 SQL Management Studio 的 Windows 机器连接到有问题的数据库,并使用:
netstat -abn
Run Code Online (Sandbox Code Playgroud)
然后我搜索 ssms.exe 以获取连接详细信息:
TCP 192.168.0.31:50777 192.168.0.78:49399 ESTABLISHED [Ssms.exe]
Run Code Online (Sandbox Code Playgroud)
或者,登录数据库服务器并在 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;"
Run Code Online (Sandbox Code Playgroud)