Node-RED 可以當作是收集、處理、輸出資料的中心,因此更要加以研究如何運用它抓資料、運算資料跟導出資料!這次我打算將 Node-RED 生成的亂數值塞入 MSSQL 資料庫中的資料表,作為 Node-RED 與 MSSQL 連線使用的首次練習題。MSSQL 全名為 Microsoft SQL Server,因此也有人簡稱為 SQL Server,是微軟公司所推出的關聯式資料庫解決方案。
事前準備要先為 Node-RED 安裝 node-red-contrib-mssql 節點,再來請準備好一個隨時可以連線的 MSSQL 資料庫,我自己是先安裝在本機中,並設置為混合登入模式,因為其預設只接受 Windows 驗證模式,這樣設定就能夠用帳號與密碼登入資料庫,這邊請特別注意!密碼需為強密碼規則,帳號預設為「sa」。再來為了讓 Node-RED 順利與 MSSQL 連線,請記得一定要到「SQL Server 設定管理員」中將 TCP/IP 連接啟用,Port 請使用 1433,這是 SQL Server 預設的 Port。(本文主要介紹 Node-RED 的操作,MSSQL 僅簡單在前文闡述操作大綱)
▲ 透過右上方「≡」→「設置」可以開啟這個畫面,接著選擇「Palette」,到「安裝」搜尋「node-red-contrib-mssql」模組並安裝它,這是連線到 MSSQL 很重要的節點,一定要安裝喔!
▲ 接著分別拖拉出 inject(時間戳)、function(函數)和 debug(除錯)節點,並依照圖中排列方式與 MSSQL 節點連接在一起,雙擊函數節點,打入以下的程式碼:
var m;
m = 100*Math.random(); // 生成亂數
sql = "INSERT INTO [dbo].[test]([text])VALUES('"+ m +"')";
msg.payload = sql;
return msg;
這邊可以參考我之前寫的文章,總之就是生成一個亂數值,接著在與 SQL 插入語法寫在一起,最終是要輸出這個 SQL 語法。我有先在 MSSQL 中建立好 test 資料庫與同名資料表,資料表設有 id 跟 text 欄位,id 是主鍵且可自動排序,text 用來塞數值,
▲ 接著雙擊 MSSQL 節點,在「Connection」右側點「✏️ 鉛筆」圖示編輯資料庫連線資訊。這次我資料庫跟資料表都是設置為「test」,簡單好懂。
▲ 點「時間戳」節點可以執行這個流程,執行後可以看到右側的除錯窗口,undefined 表示沒有錯誤輸出,沒消息就是好消息!馬上用 SQL Server Management Studio(SSMS)去看看資料有沒有進去,果然正常顯示出來啦!附上 SQL 查詢語法:
SELECT TOP (200) id, text
FROM test
ORDER BY id DESC
最後附上這次練習的 flow.json 給大家參考:
[
{
"id": "5830b2fd596f5b8d",
"type": "tab",
"label": "MSSQL 寫入測試",
"disabled": false,
"info": ""
},
{
"id": "bbdfa05b7602faed",
"type": "inject",
"z": "5830b2fd596f5b8d",
"name": "",
"props": [
{
"p": "payload"
},
{
"p": "topic",
"vt": "str"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payloadType": "date",
"x": 110,
"y": 60,
"wires": [
[
"cb869fe21d379d4c"
]
]
},
{
"id": "cb869fe21d379d4c",
"type": "function",
"z": "5830b2fd596f5b8d",
"name": "",
"func": "var m;\nm = 100*Math.random(); // 生成亂數\nsql = \"INSERT INTO [dbo].[test]([text])VALUES('\"+ m +\"')\";\nmsg.payload = sql;\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 110,
"y": 120,
"wires": [
[
"a602bd4c334e6782"
]
]
},
{
"id": "5ab62d807cbff7d7",
"type": "debug",
"z": "5830b2fd596f5b8d",
"name": "",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "payload",
"targetType": "msg",
"statusVal": "",
"statusType": "auto",
"x": 450,
"y": 120,
"wires": []
},
{
"id": "a602bd4c334e6782",
"type": "MSSQL",
"z": "5830b2fd596f5b8d",
"mssqlCN": "df8c0b88.91b0a8",
"name": "MSSQL",
"query": "",
"outField": "payload",
"x": 280,
"y": 120,
"wires": [
[
"5ab62d807cbff7d7"
]
]
},
{
"id": "df8c0b88.91b0a8",
"type": "MSSQL-CN",
"name": "test",
"server": "127.0.0.1",
"encyption": false,
"database": "test"
}
]
留言區 / Comments
萌芽論壇