I'm working on an application that inserts data in bulk and in order to reduce the number of queries I wanted to use Table Valued parameters.
Example:
var sql = require('node-sqlserver');
var connectionString = 'Driver={SQL Server Native Client 11.0};server=tcp:serverName.database.windows.net,1433;UID=user@serverName;PWD=password;Database={databaseName};Encrypt=yes;Connection Timeout=30;';
sql.open(connectionString, function(err, conn) {
if(err) {
return console.error('could not connect to sql', err);
}
var tableValuedObject = ???;
var query = 'usp_InsertSomeTable ?';
conn.query(query, tableValuedObject, function(err, result) {
if(err) {
return console.error('error running insert', err);
}
});
});
Where usp_InsertSomeTable is defined as
CREATE PROCEDURE usp_InsertSomeTable
@TVP SomeTableType READONLY
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO SomeTable (Data) SELECT Data FROM @TVP;
END
I have my table valued object defined as
CREATE TYPE SomeTableType AS TABLE
(
Data VARCHAR(50)
);
What structure should the JavaScript object have or has that not been implemented in the Node-SqlServer project?
Edit 1:
using var tableValuedObject = { Data: 'Hello World' }; produces an error:
node-sqlserver\lib\sql.js:3254: Uncaught Error: [msnodesql] Invalid parameter(s) passed to function query or queryRaw.
Edit 2:
using var tableValuedObject = [{ Data: 'Hello World'}]; produces and error:
error running query { [Error: IMNOD: [msnodesql] Parameter 1: Invalid parameter type] sqlstate: 'IMNOD', code: -1 }