可將 UPDATE
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。
UPDATE
import sql from 'mssql'
await sql.connect ({
server: 'mssql-2017',
port: 1433,
user: 'sa',
password: '111111',
database: 'KnexLab',
options: {
trustServerCertificate: true
}
})
let id = 12
let title = 'Google'
let content = 'Chrome'
let { recordset } = await sql.query (`
UPDATE articles
SET title = '${title}',
content = '${content}'
WHERE id = ${id}
SELECT @@ROWCOUNT AS rows
`)
console.log (recordset)
第 3 行
await sql.connect ({
server: 'mssql-2017',
port: 1433,
user: 'sa',
password: '111111',
database: 'KnexLab',
options: {
trustServerCertificate: true
}
})
使用 Node-mssql 連接 MSSQL:
server
:設定 server 名稱,不能使用 IPport
:設定 portuser
:設定 idpassword
:設定 passworddatabase
:設定連接 databasetrustServerCertificate
:本機開發設定為true
sql.connect
回傳 Promise,因此要加上 top level await
14 行
let id = 12
let title = 'Google'
let content = 'Chrome'
let { recordset } = await sql.query (`
UPDATE articles
SET title = '${title}',
content = '${content}'
WHERE id = ${id}
SELECT @@ROWCOUNT AS rows
`)
console.log (recordset)
- 將
UPDATE
傳入sql.query
UPDATE
直接以 Template String 達成 parameter,String 要自行加上'
- 若要回傳
UPDATE
所執行筆數,必須加上SELECT @@ROWCOUNT
sql.query
回傳為 Promise,使用 top level await 處理- 使用 Object Destructure 抽出
recordset
才是實際回傳 Array
Conclusion
sql.query
支援 Promise,因此可使用 Promise Chain 或 Async Await 處理皆可- T-SQL 無法使用
RETURNING *
回傳剛修改資料,因此只能使用SELECT @@ROWCOUNT
回傳執行筆數