Tag: sql server

全局连接已经存在。 首先调用sql.close()

我试图build立一个node.js后端,我有一个用例,我应该每次连接到服务器,而不是数据库,请参阅一个Web服务: router.get('/CriticalityGraph/:server/:user/:password/:database/', function(req, res, next) { user = req.params.user; password = req.params.password; server = req.params.server; database = req.params.database; criticalityState=req.params.criticalityState // config for your database var config = { user: user, password: password, server: server, database:database }; sql.connect(config, function (err) { var request = new sql.Request(); request.query("SELECT MachineName, alarmState, criticality FROM MachineTable ORDER BY criticality DESC" […]

NodeJS和MSSQL – 在…中插入一个parm,并显示运行的SQL

我有一个函数,执行SQL查询并返回JSON输出。 我怎样才能将一个参数插入一个类似的子句 – 例如student_lastname like 'ABC%' – ABC将会是一个参数? 如果需要的话,我可以将SQL自己串在一起,只是试图遵循最佳实践并避免SQL注入。 当下面的SQL无法返回任何行时,如何显示它实际运行的SQL? 我可以做一个console.log(sql.query)或类似的东西? 现在,我将尝试使用SQL分析器来查看正在发生的事情。 码: return sql.connect(sqlConfig).then(pool => { // Query – how to fold in my parameter in a like statement return pool.request() .input('parms_initialLettersLastname', sql.VarChar(50), initialLettersLastname) .query("select student_id, student_firstname, student_lastname, student_city, student_state, student_zip from students where student_lastname like '@parms_initialLettersLastname%' ORDER BY student_lastname, student_firstname ") }).then(function(result) { […]

使用父ID将子JSON对象移动到它们自己的对象

我对JavaScript非常陌生,正在使用Node.JS访问API并将响应存储在SQL Server中。 我正在使用“请求”和“mssql”节点包。 我不重视这些,他们似乎是我所需要的,并有良好的文件和支持。 我的问题:我有以下格式的API的JSON响应: requests = [ { url: 'https://domain.zendesk.com/api/v2/requests/2.json', id: 2, status: 'closed', priority: 'normal', type: 'incident', subject: 'Test Ticket', description: 'Test ticket', organization_id: 10101010101, via: { channel: 'email', source: { from: { address: 'bill.bob@domain.com', name: 'Bill Bob' }, to: { name: 'Company Helpdesk', address: 'testzendesk@domain.com' }, rel: null }, }, custom_fields:[ { […]

与SQL服务器一起发生事务隔离级别问题

我们有一个具有Sequelize事务的函数。 在事务中,它检查数据库表行上的字段,并基于该字段返回或继续更新各种数据库表。 例如 let buyingStatus = await models.buyingFood.findOne({ where: { id: 21 }, transaction: t}); if (buyingStatus.status == 'bought') return 'already bought' 如果继续,它会更新多个地方,只有在状态不被bought时才更新,最后将状态更改为bought 。 问题是当函数被同时调用两次时。 瓶颈是select语句后发生的更新。 所以两个人可以通过没有买的购买状态,然后更新bought状态,以及所有其他更新。 不是SQL的专家,我们研究发现,locking表或更改隔离级别可以解决这个问题。 但是,我们都执行并没有帮助。 见下文 1)改变隔离级别 let t = await models.sequelize.transaction(isolationLevel: Sequelize.Transaction.ISOLATION_LEVELS.SERIALIZABLE); 2)在查找上设置locking let buyingStatus = await models.buyingFood.findOne({ where: { id: 21 }, transaction: t, lock: t.LOCK.UPDATE }); 我们想要的是从未提交的交易中读取,所以如果人A已经改变了他之前的bought状态

准备好的语句不能在节点js中用mssql执行

在运行代码之后,我得到的只是控制台日志“完成”,没有更新数据库。 我究竟做错了什么? var pool = new sql.ConnectionPool(config); var ps = new sql.PreparedStatement(pool); ps.input('code', sql.VarChar); ps.input('hex', sql.VarChar); ps.prepare("UPDATE tHE_SetItem SET acPicture = CONVERT(varbinary(max), @hex, 2) WHERE acIdent = @code;", function(err) { async.mapSeries(hexes, function(pair, next) { ps.execute({code: pair.code, hex: pair.hex}, next); }, function(err) { ps.unprepare(function(err) { console.log("Done!"); }); }); });

Node.js MySQL的质量插入操作失败

下面是我的代码插入我的MYSQL数据块 connectionPool.getConnection(function(err, connection){ if(err) { winston.log('info', '——- ERROR while getting connection: ' + err.message); connection.release(); return; } connection.query('INSERT INTO PollOptions (idPollOption, Option, PollId) values ?', [pollOptionsArray], function(err, rows){ if(err) { winston.info('info', '———————– ERROR: ' + err); connection.release(); return; } connection.release(); }); }); pollOptionsArray在哪里 [ ["POPE1lrKXMy9Q","Adam","POLL4yrFXzkcX"], ["POPVy-StXGJcm","Mike","POLL4yrFXzkcX"],["POPNkMSFmGy97","Lucy","POLL4yrFXzkcX"] ] 数据库表格具有以下列 idPollOption,Option,PollId(全部为VARCHAR) 它给了我以下错误: 错误:错误:ER_PARSE_ERROR:您的SQL语法中有错误; ('POPE1lrKXMy9Q','Adam','POLL4yrFXzkcX'),('POPVy-StXGJ')在第1行检查与您的MySQL服务器版本相对应的手册, 我什至试图硬编码我的SQLinput是这样的: var temp […]

Node.js / Javascript等价于mysql_real_escape_string()

我需要制作一个JavaScriptstring,它传递给Node.js对MSSQL友好。 这个问题: 使一个JavaScriptstringsql友好有一个很好的答案,解释如何为MySQL转义string: 感谢Paul D'Aoust function mysql_real_escape_string (str) { return str.replace(/[\0\x08\x09\x1a\n\r"'\\\%]/g, function (char) { switch (char) { case "\0": return "\\0"; case "\x08": return "\\b"; case "\x09": return "\\t"; case "\x1a": return "\\z"; case "\n": return "\\n"; case "\r": return "\\r"; case "\"": case "'": case "\\": case "%": return "\\"+char; // prepends a backslash […]

如何在Node.JS中为MSSQL创build预准备语句?

我需要在Javascript中插入一个string到MSSQL表中。 这是我迄今为止: 使用Javascript: var message = "It's a great day today!"; $.post('www.server.com/message='+message, function(response){ console.log(response); }); Node.js服务器: //….. a bunch of code has been used to accept the HTTP request and get the message… // for the purpose of this example, the message is asigned to 'NodeMsg' var mssqldb = require("../core/mssql"); var NodeMsg = theMessageReceivedFromHTTPRequest; function […]

快速有效地创buildCSV文件报告,而不会减慢node.js服务器的速度

我有一个Node.js快速API,托pipe在一个Azure应用服务上,提供来自SQL服务器数据库的数据。 一个新的要求是根据可定制的数据导出报告。 这些应该是即时生成的CSV文件。 我面临的问题是,在某些情况下,CSV文件将会非常大(可能是50万行)。 我不难创build这些文件,然后将它们上传到Blob存储,或者直接将它们提供给用户。 但是,正如你可以想象的那样,这将花费一些负载在服务器上。 这个API每分钟提供约500个Post / Get请求。 Node的单线程特性意味着当有人请求类似的CSV文件时,服务器将抓取。 我需要一些build议,而不是做什么。 我的想法是启动一个新的应用程序,在一个新的服务器上(可能是一个用ASP.NET编写的),负责创buildCSV文件。 它公开一个接收参数来创build文件的结束点,然后用文件或链接进行响应。 但是,因为它是一个单独的服务器(如果我做了类似于.NET的单独线程),它在等待响应时不会降低节点服务器的速度。 这看起来好像很多工作。 有什么简单的吗? 我对任何可以直接连接到SQL数据库并生成报告的服务开放(所以我可以把它给客户端,而不是定制的报告,我需要硬编码)。

将一个非常大的string数组传递给SQL存储过程

我有这个存储过程,每个13个字符长的产品的string数组,例如:2345697894131,现在从我的后端代码,我可以通过将其转换为一个CSVstring作为CSV传递它。 因此,在存储过程中,我可以捕获它: @in_product_id VARCHAR(MAX) or maybe VARCHAR(8000) 然后我使用分裂函数与IN来检查各种条件,例如: IF EXISTS (SELECT top 1 * FROM Table WHERE (productid IN (SELECT (value) from dbo.split(@in_product_id,',')))) select查询的语法可能不正确。 但这是采取一系列ID的理想方式。 我担心的是当产品数组太大而超过MAX时,我将不得不跟踪这些被错过的ID。 我需要知道在存储过程中处理这种input的理想方式,还是应该限制要采取的产品数量?