如何解决插入数据库数组缓冲区
请告诉我,如何正确地从Node.js代码向数据库发送查询,以便成功插入值?
我需要的请求结构(来自SQL Server Management Studio):
select id,string_agg(distinct answer,',' order by answer) follow_up_to
from mytable
group by id
数据库中的现有行示例:
INSERT INTO [db].[Employee]([ID],[NAME],[TYPE])
VALUES (<ID,MICBINID>,<NAME nvarchar(120)>,<TYPE,MICBINID>)
我想通过使用0x002554778996547896555558745734852612 Mike Ross 0x00179314626849513971917683426984
命令将新行ID的创建转移到基础。
我需要在现有请求中传递TYPE的标识符(数组)。
我的sql请求:
NEWID()
但是无论我如何更改类型ID转换的变化,错误总是相同的
不允许从数据类型varchar到varbinary的隐式转换。使用CONVERT函数运行此查询。
解决方法
您应该使用request.input()
function来指定输入参数,它们的类型和值。
对于mssql
模块,您想提供一种sql.VarBinary(sql.MAX)
类型的Buffer对象,该对象如下所示:
pool.request()
.input("data",sql.VarBinary(sql.MAX),binaryData)
.query("insert dbo.Demo (BinaryData) values (@data)");
完整的示例:
const sql = require('mssql');
const config = {
database: "StackOverflow",options: {
encrypt: false,enableArithAbort: true
},password: "YourP4ssw0rdHere",port: 1433,server: "YourServerNameOrIpAddress",user: "YourSqlLogin"
};
const binaryData = Buffer.from([
0x00,0x25,0x54,0x77,0x89,0x96,0x78,0x55,0x58,0x74,0x57,0x34,0x85,0x26,0x12
]);
let pool = null;
console.log("Connecting...");
sql.connect(config)
.then((newpool) => pool = newpool)
.then(() => {
console.log("Dropping...");
return pool.request()
.query("drop table if exists dbo.Demo");
})
.then(() => {
console.log("Creating...");
return pool.request()
.query("create table dbo.Demo ( ID int not null identity(1,1),BinaryData varbinary(max) )");
})
.then(() => {
console.log("Inserting...");
return pool.request()
.input("data",binaryData)
.query("insert dbo.Demo (BinaryData) values (@data)");
})
.then(() => {
console.log("Selecting...");
return pool.request()
.query("select * from dbo.Demo");
})
.then((select) => {
console.dir(select);
console.log(`${JSON.stringify(select.recordset)}`);
})
.then(() => pool.close())
.catch((err) => {
console.error(`ERROR: ${JSON.stringify(err)}`);
pool.close();
});
这将导致:
% node stackoverflow.js
Connecting...
Dropping...
Creating...
Inserting...
Selecting...
{
recordsets: [ [ [Object] ] ],recordset: [ { ID: 1,BinaryData: [Buffer [Uint8Array]] } ],output: {},rowsAffected: [ 1 ]
}
[{"ID":1,"BinaryData":{"type":"Buffer","data":[0,37,84,119,137,150,120,85,88,116,87,52,133,38,18]}}]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。