插入数据库数组缓冲区
Insert into database array buffer
请告诉我,如何从 Node.js 代码正确地向数据库发送查询以便成功插入值?
我需要的请求结构(来自SQL Server Management Studio):
INSERT INTO [db].[Employee]([ID], [NAME], [TYPE])
VALUES (<ID, MICBINID>, <NAME nvarchar(120)>, <TYPE, MICBINID>)
来自数据库的现有行示例:
0x002554778996547896555558745734852612 Mike Ross 0x00179314626849513971917683426984
我想通过使用NEWID()
命令将新行的ID创建转移到基地。
而且我需要在现有的请求中传递 TYPE 的标识符(数组)。
我的sql请求:
let TYPE = "CONVERT(VARBINARY(MAX)," + type + ")";
let sql = "INSERT INTO [db].[Employee] (ID, NAME, TYPE) VALUES (NEWID(), '" + NAME + "', '" + TYPE + "')";
但无论我如何更改类型ID转换的变体,错误总是一样
Implicit conversion from data type varchar to varbinary is not allowed. Use the CONVERT function to run this query.
您应该使用 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: "Whosebug",
options: {
encrypt: false,
enableArithAbort: true
},
password: "YourP4ssw0rdHere",
port: 1433,
server: "YourServerNameOrIpAddress",
user: "YourSqlLogin"
};
const binaryData = Buffer.from([
0x00, 0x25, 0x54, 0x77, 0x89, 0x96, 0x54, 0x78,
0x96, 0x55, 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", sql.VarBinary(sql.MAX), 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 Whosebug.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,84,120,150,85,85,88,116,87,52,133,38,18]}}]
请告诉我,如何从 Node.js 代码正确地向数据库发送查询以便成功插入值?
我需要的请求结构(来自SQL Server Management Studio):
INSERT INTO [db].[Employee]([ID], [NAME], [TYPE])
VALUES (<ID, MICBINID>, <NAME nvarchar(120)>, <TYPE, MICBINID>)
来自数据库的现有行示例:
0x002554778996547896555558745734852612 Mike Ross 0x00179314626849513971917683426984
我想通过使用NEWID()
命令将新行的ID创建转移到基地。
而且我需要在现有的请求中传递 TYPE 的标识符(数组)。
我的sql请求:
let TYPE = "CONVERT(VARBINARY(MAX)," + type + ")";
let sql = "INSERT INTO [db].[Employee] (ID, NAME, TYPE) VALUES (NEWID(), '" + NAME + "', '" + TYPE + "')";
但无论我如何更改类型ID转换的变体,错误总是一样
Implicit conversion from data type varchar to varbinary is not allowed. Use the CONVERT function to run this query.
您应该使用 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: "Whosebug",
options: {
encrypt: false,
enableArithAbort: true
},
password: "YourP4ssw0rdHere",
port: 1433,
server: "YourServerNameOrIpAddress",
user: "YourSqlLogin"
};
const binaryData = Buffer.from([
0x00, 0x25, 0x54, 0x77, 0x89, 0x96, 0x54, 0x78,
0x96, 0x55, 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", sql.VarBinary(sql.MAX), 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 Whosebug.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,84,120,150,85,85,88,116,87,52,133,38,18]}}]