概要
node-mssql とは SQLServer に node.js から接続するモジュール。
これを普通に
npm install mssql
でインストールすると、v5 台が入ります。
ですがこれで、ドキュメントにあるように
let result1 = await pool.request()
.input('input_parameter', sql.Int, value)
.query('select * from mytable where id = @input_parameter')
とやっても
parameter.type.validate is not a function
というエラーが出てSQLが実行されません。
エラーの意味
これは、sql.Int
が正しい型ではないという意味のエラーのようです。
実際、ソースを追いかけると、sql.Int().type.validate
を実行しようとしてエラーとなっているようです。
なぜエラーになるのか。
この type の構造は、v6 台(まだ beta)で大きく変わっているのですが、
validate メソッドはそちらには存在しています。
つまり、v5 で v6 のメソッド呼んでエラーになってる感じです。
勝手な想像ですが、開発されている方が v5 で構造変えて、v6 にもっていって、v5 はテストしないまま、v6 にフォーカスしてしまっているのではないかと。
対処法
1. 型を省略する
let result1 = await pool.request()
.input('input_parameter', value) // 型省略
.query('select * from mytable where id = @input_parameter')
とりあえず、これで動きます。
NVarChar型
や Date型
を明示したい時など困りそうですが。。。
2. 変更後の構造で指定する
tedious
の型に依存しているので、tedious
から型情報をもっていきます。
let result1 = await pool.request()
.input('input_parameter', () => ({ type: require('tedious').TYPES.Int }), value)
.query('select * from mytable where id = @input_parameter')
とりあえず、動きますが、これ書くのは嫌ですね。
どこかでプルリク出そうかな。