如何通过NodeJs API调用设置数据库的名称



我有我的sql server目前在azure门户(基本上我使用mssql),我正试图使用NodeJs API调用创建一个新的数据库

基本上我的API看起来像这样的"http://localhost:9000/api/dbcreation/test/customer",我的控制器名称是dbcreation, test是我的数据库名称,其中存储过程呈现创建新数据库和客户是我的新数据库名称。

下面是由dbcreation控制器调用来执行查询的模型代码,@dbname值是我试图从API

获取的新数据库名称(客户)。
exports.get = async function (customerdb, dbname){
var param_list = [];
param_list.push({
"param_name": "dbname",
"param_type": "string",
"param_value": dbname
});
var query = `exec p_dbCreation @dbname`;
return db.sqldb.execute_read_query(query, customerdb, param_list);
}

下面是我的存储过程代码

ALTER PROCEDURE [dbo].[p_dbCreation] @database_name nvarchar(30)
AS
CREATE DATABASE [@database_name] (EDITION = 'Standard', SERVICE_OBJECTIVE = ELASTIC_POOL (name = [xxxxx]), MAXSIZE = 250 GB) WITH CATALOG_COLLATION = SQL_Latin1_General_CP1_CI_AS;
GO

当我调用api时,调用正在成功执行,但数据库正在以名称@database_name创建,它没有获取我传递的参数值。你能帮我一下吗?

这个问题是由你的T-SQL脚本引起的。我们需要动态拼接SQL语句,然后执行它。脚本应该如下所示:

alter PROCEDURE [dbo].[p_dbCreation] @database_name nvarchar(30) 
AS
declare @sql nvarchar(2000)
set @sql='CREATE DATABASE '+@database_name+'(EDITION = ''Standard'', SERVICE_OBJECTIVE = ELASTIC_POOL (name = [xxxxx]), MAXSIZE = 250 GB) WITH CATALOG_COLLATION = SQL_Latin1_General_CP1_CI_AS;'
BEGIN
EXEC(@sql)
END

最新更新