點燈坊

失くすものさえない今が強くなるチャンスよ

對 MSSQL 查詢資料

Sam Xiao's Avatar 2021-10-25

可將 SELECT Statement 直接傳入 Node-mssql,並且支援 Template String 實現 Parameter 避免湊字串而造成 SQL Injection。

Version

Node 14.18.1
Node-mssql 7.2.1
MSSQL 2017

Add Library

$ yarn add mssql

mssql:安裝 node-mssql 連接 MSSQL。

SELECT

import sql from 'mssql'

await sql.connect ({
  server: 'mssql-2017',
  port: 1433,
  user: 'sa',
  password: '111111',
  database: 'KnexLab',
  options: {
    trustServerCertificate: true
  }
})

let id = 2

let { recordsets } = await sql.query (`
  SELECT *
  FROM articles
  WHERE id = ${id}
`)
console.log (recordsets)

第 3 行

await sql.connect ({
  server: 'mssql-2017',
  port: 1433,
  user: 'sa',
  password: '111111',
  database: 'KnexLab',
  options: {
    trustServerCertificate: true
  }
})

使用 Node-mssql 連接 MSSQL:

  • server:設定 server 名稱,不能使用 IP
  • port:設定 port
  • user:設定 id
  • password:設定 password
  • database:設定連接 database
  • trustServerCertificate:本機開發設定為 true
  • sql.connect 回傳 Promise,因此要加上 top level await

14 行

let id = 2

let { recordsets } = await sql.query (`
  SELECT *
  FROM articles
  WHERE id = ${id}
`)
console.log (recordsets)
  • SELECT 傳入 sql.query
  • SELECT 直接以 Template String 達成 parameter
  • sql.query 回傳為 Promise,使用 top level await 處理
  • 使用 Object Destructure 抽出 recordsets 才是實際回傳 Array

select000

Conclusion

  • sql.query 支援 Promise,因此可使用 Promise Chain 或 Async Await 處理皆可
  • sql.connect 也是回傳 Promise

Reference

Node-mssql, Connect via Config Object