gpt4 book ai didi

sql - 如何在 node.js MSSQL 中执行具有可变表名的查询?

转载 作者:搜寻专家 更新时间:2023-10-31 23:51:22 25 4
gpt4 key购买 nike

我目前有以下功能可以正常工作:

const sql = require('mssql');
const config = require('../../config/credentials');
const Hardware = function () { };

Hardware.prototype.create = function (body) {
return new sql.ConnectionPool(config).connect().then(function (pool) {
return pool.query
`SELECT *
FROM my_table
WHERE hardware_guid = ${id}
});
};

但我希望查询中的“my_table”是一个变量,如${my_table}。如果我以同样的方式进行操作,则会出现以下错误:

Must declare the table variable "@param1"

查看 mssql 包 ( https://www.npmjs.com/package/mssql ) 的文档,特别是在 ConnectionPool 部分,我可以看到它们按以下方式声明此参数:

const sql = require('mssql')

sql.connect(config).then(pool => {
// Query

return pool.request()
.input('input_parameter', sql.Int, value)
.query('select * from mytable where id = @input_parameter')
}).then(result => {
console.dir(result)
}).catch(err => {
// ... error checks
})

sql.on('error', err => {
// ... error handler
})

所以我尝试做类似的事情,这就是我所做的:

var sql = require("mssql")
var config = require("./test");

var id='1'
const pool1 = new sql.ConnectionPool(config);

pool1.connect().then(pool => {

return pool1.request() // or: new sql.Request(pool1)
.input('mytable', sql.NVarChar, 'nvs_central.software_governance')
.query(`SELECT *
FROM @mytable
WHERE software_guid = ${id}`)
}).then(result => {
console.dir(result)
}).catch(err => {
console.dir(err)
});

pool1.on('error', err => {
console.dir(err)
});

但我仍然收到“必须声明表变量“@mytable”错误。请注意,如果我将最后一段代码中的“@mytable”替换为“my_table_name”(所以我将表的实际名称改为变量/参数的)它可以完美地检索预期的数据。

那我需要做什么呢?

谢谢!

最佳答案

您仍然可以使用 .inputs 来保护您免受 SQL 注入(inject);您只需要以字符串形式通过 EXEC() 将它们泵入:

const result = await pool.request()
.input("TableName", $ddi.app.services.sql.lib.VarChar(50), oData.TableName)
.input("TableColumn", $ddi.app.services.sql.lib.VarChar(50), oData.TableColumn)
.input("ID", $ddi.app.services.sql.lib.VarChar(50), oData.ID)
.query(`
EXEC('SELECT ' + @TableColumn + ' FROM ' + @TableName + ' WHERE ' + @TableColumn + ' = ' + @ID + ';');
`)
;

关于sql - 如何在 node.js MSSQL 中执行具有可变表名的查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46083511/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com