如何使用Node.js在MSSQL中运行架构创建SQL脚本?

时间:2018-07-04 08:57:19

标签: sql-server node.js azure-functions sqlcmd

我将代码部署在Azure Function App中并使用NodeJS,我试图在SQL Server数据库上执行sql脚本。为了解决这个问题,我使用了NPM软件包sqlcmd-runner

这是我正在使用的代码:

module.exports.dumpScriptinDatabase = (dbConfig, context) => {
    return new Promise((resolve, reject) => {
    sqlcmd({
        server: dbConfig.server,
        database: dbConfig.options.database,
        username: dbConfig.userName,
        password: dbConfig.password,
        encryptedConnection: true,
        inputFiles: [`${__dirname}\\db.sql`]
    })
    .catch((error) => {
        reject('Error dumping script!!')
    })
    .done(() => {
        resolve('Dumping script completed.')
    });
});

我正在dbConfig变量中获取所有数据库详细信息。此外,db.sql在模式中创建表,视图等。

我面临的问题是,该模块在发生故障的情况下永远不会向我返回错误,并且也无法成功执行。服务器在执行时返回502错误代码。

我能够调试的一件事是npm软件包代码使用sqlcmd执行脚本。

有人可以帮我吗?

1 个答案:

答案 0 :(得分:1)

因此,我已经使用几个源文件进行了测试,可以正常运行,脚本成功运行。

index.js

const dbConfig = require('./dbconfig.json');
const dumpScript = require('./dumpScript.js');

console.log('Running script');
dumpScript.dumpScriptinDatabase(dbConfig, 'context').then(() => {
   console.log('Script complete');
}).catch ( (err) => {
   console.error('Script error: ', err); 
});

dumpScript.js

const sqlcmd = require('sqlcmd-runner');

module.exports.dumpScriptinDatabase = (dbConfig, context) => {
    return sqlcmd({
        server: dbConfig.server,
        database: dbConfig.options.database,
        username: dbConfig.userName,
        password: dbConfig.password,
        encryptedConnection: true,
        inputFiles: [`${__dirname}\\db.sql`]
    });
}

dbConfig.json

{
   "server": "sql_server",
   "options": {
       "database": "test_db"
   },
   "userName": "user",
   "password": "password"

}

我已经简化了dumpScript.js文件,我们可以简单地从sqlcmd函数返回promise,而不用使用.then和.catch。

然后我们在index.js中进行处理。

我要提到的几件事,您需要在 PATH 上使用最新版本的sqlcmd实用程序才能工作。

另外,您可能需要修改index.js脚本,我正在从.json文件加载dbConfig,您可能正在做一些不同的事情。