sqlcmd 在 CMD 中工作,而不在 bash 中工作

sqlcmd works in CMD and not in bash

我在 MSSQL 驱动程序在 Ubuntu 中工作时遇到了很多问题。我已按照以下 tutorial 使 sqlcmdUbuntu 16.04 中工作。

# In CMD:
sqlcmd -S my_server_name -U my_username -P my_password -d my_database
1> select name from sys.databases
2> go

在 Ubuntu 中安装相同的工具后,它似乎可以工作,但在尝试连接到同一数据库时超时:

# In Ubuntu bash
sqlcmd -S my_server_name -U my_username -P my_password -d my_database
Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : Login timeout expired.
Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : TCP Provider: Error code 0x2AFA.
Sqlcmd: Error: Microsoft ODBC Driver 17 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..

我尝试更改数据库的配置,使端口在 1433 处保持静态,但仍然没有成功。

你有什么建议吗?

我已经解决了问题!

1。在 Ubuntu

上安装 MSSQL 驱动程序

关注这个tutorial

2。确保数据库上的端口是静态的

按照this tutorial设置静态端口。

3。确定数据库的 IP 地址

我不得不在数据库上调用以下代码来获取 ip 地址:local_net_address。

SELECT  
+    CONNECTIONPROPERTY('net_transport') AS net_transport,
+             CONNECTIONPROPERTY('protocol_type') AS protocol_type,
+             CONNECTIONPROPERTY('auth_scheme') AS auth_scheme,
+             CONNECTIONPROPERTY('local_net_address') AS local_net_address,
+             CONNECTIONPROPERTY('local_tcp_port') AS local_tcp_port,
+             CONNECTIONPROPERTY('client_net_address') AS client_net_address

4。连接到数据库(在 Ubuntu bash 中)

这里有两个使用 netcat 和 sqlcmd 的例子。

# Using MSSQL tool
sqlcmd -S my_server_ip_adress//my_server_name,my_port -U my_username -P my_password -d my_database

# Using netcat
nc -z -v -w5 my_server_ip_adress my_port