У меня есть лямбда-функция для сохранения нескольких записей на сервере SQL с помощью хранимой процедуры.Я передаю данные из лямбды в виде табличных параметров (TVP).
Я успешно могу отправить 2 столбца типа varchar в TVP, но мне нужно передать 3-й столбец, который содержит данные буфера документа, которыйбыть сохраненным в таблице сервера sql (тип столбца - Image).
Данные в documentList приведены ниже
[ 'abc', 'SIGNED', <Buffer 25 50 44 46 ... > ]
Когда я запускаю код, я получаю сообщение об ошибке в консоли как «RequestError»: Данные для табличного параметра "@documents" не соответствуют типу таблицы параметра. Ошибка SQL Server: 8029, состояние: 2 "
let list = []
for (let i = 0; i < documentList.length; i++) {
list.push({
"id": documentList[i].id,
"status": documentList[i].status,
"fileContent": documentList[i].fileContent
});
}
if (list.length > 0) {
var rowList = [];
for (var i = 0; i < list.length; i++) {
var paramList = []
Object.keys(list[i]).forEach(key => {
paramList.push(list[i][key]);
});
rowList.push(paramList);
}
var table = {
columns: [
{ name: "id", type: TYPES.VarChar, length: 200 },
{ name: "status", type: TYPES.VarChar, length: 50 },
{ name: "fileContent", type: TYPES.Image }
],
rows: rowList
};
var request = new Request(spUpdateDocumentStatus,
function (err) {
if (err) {
console.log(err);
}
connection.close();
});
request.addParameter('documents', TYPES.TVP, table);
connection.callProcedure(request);
}
Данные в переменной" таблица "время выполнения - как показано ниже
{ columns:
[ { name: 'id', type: [Object], length: 200 },
{ name: 'status', type: [Object], length: 50 },
{ name: 'fileContent', type: [Object] } ],
rows:
[ [ 'abc',
'SIGNED',
<Buffer 25 50 44 46 ... > ] ] }
Тип таблицы, созданной мной на сервере sql, указан ниже
CREATE TYPE [dbo].[TestDocuments] AS TABLE(
[id] [varchar] (200),
[status] [varchar] (50),
[fileContent] [image]
)
Вызываемая хранимая процедура выглядит так:
CREATE PROCEDURE [dbo].[spUpdateDocumentStatus] @documents TestDocuments readonly
AS
BEGIN
-- logic
END
Примечание. Если не использовать TVP, если я передам те же данные буфера, что и у меня выше, в качестве типа Image в хранимую процедуру (изменил SP для принятия типа данных Image), тогда код сработает.