Node-RED:將資料寫入至 MSSQL 資料庫中的資料表

2021/12/07 3,013 5 網站技術 , 資料庫 , Node.js , Node-RED

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"
    }
]
贊助廣告 ‧ Sponsor advertisements

留言區 / Comments

萌芽論壇