職務上需要連接到mssql,這是我第一次試圖在linux連接mssql,以前有寫過.net一段時間,但是十多年不曾再碰,現在早忘得一乾二淨。
好在網路上很多熱心的網友,做起來不難。
OS
Linux tyc 5.15.0-209.161.7.2.el9uek.x86_64 #2 SMP Tue Aug 20 10:44:41 PDT 2024 x86_64 x86_64 x86_64 GNU/Linux
Red Hat Enterprise Linux release 9.4 (Plow)
安裝連線用底層 unitODBC
這個是連資料庫用的 adapter ,一定要裝,注意大小寫,原本參考的資料不正確[1][2]?。
這樣就好了,其它不必設定。
安裝連線資料庫的agent
依照[2]的建議安裝 freetds
注意名稱改了,修改設定檔:
# vi /etc/freetds.conf
host = 192.168.0.55
port = 1433
tds version = 7.0
刮號中的名稱自取,tds版本的話請參考微軟的資料[3][4]。
測試
使用tsql來測試
Password:<打入密碼>
locale is "en_US.UTF-8"
locale charset is "UTF-8"
using default charset "UTF-8"
1><輸入指令>
這裡已經確定資料庫沒有問題了,接下來可以下sql,第一次用發現怎麼下指令都沒用,最後透過[5]的說明,才知道要用go,例如show databases:
2> go
name database_id create_date
master 1 Apr 8 2003 09:13:36:390AM
tempdb 2 Jan 21 2025 05:35:55:950PM
model 3 Apr 8 2003 09:13:36:390AM
msdb 4 Oct 8 2022 06:31:57:550AM
MYDB 5 Oct 28 2024 02:55:31:853PM
MYDRP_DEV 6 Feb 7 2025 11:02:01:537AM
MYDRP 7 Feb 3 2025 11:39:49:093AM
MYDRP_TEST 8 Feb 7 2025 11:01:51:913AM
(8 rows affected)
show tables[6]:
2> go
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME TABLE_TYPE
MYDRP dbo my_table VIEW
(1 row affected)
查看 sql server 版本
查看每個資料表筆數
t.NAME AS TableName,
p.rows AS TotalRow
FROM
sys.tables t
INNER JOIN sys.indexes i ON t.OBJECT_ID = i.object_id
INNER JOIN sys.partitions p ON i.object_id = p.OBJECT_ID
AND i.index_id = p.index_id
GROUP BY t.Name, p.Rows
ORDER BY p.rows DESC
取回一筆資料
這樣子大致上就只剩寫程式,祝使用愉快。
參考資料
[1] https://blog.csdn.net/neighbor1000/article/details/8824084
[2] https://blog.51cto.com/u_16213320/7083674
[3] https://www.freetds.org/userguide/choosingtdsprotocol.htm#idm67886704
[4] https://www.freetds.org/userguide/choosingtdsprotocol.htm
[5] https://learn.microsoft.com/en-us/sql/relational-databases/databases/view-a-list-of-databases-on-an-instance-of-sql-server?view=sql-server-ver16
[6] https://www.atlassian.com/data/sql/sql-server-list-tables-how-to-show-all-tables