You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用mssql的ES6标签模板正确执行CREATE DATABASE语句?

使用mssql时参数化执行CREATE DATABASE等DDL语句的问题

使用npm包mssql时,我发现用ES6标签模板字面量结合CREATE DATABASE命令会报错。运行以下代码时,预期创建名为my_db的数据库:

const dbname = 'my_db';
await pool.request().query`CREATE DATABASE ${dbname}`;

实际收到RequestError错误,提示“'@param1'附近有语法错误”及对应栈追踪。

替代尝试1

const dbname = 'my_db';
await pool.request().query`CREATE DATABASE [${dbname}]`;

失败:创建的数据库名称为@param1。

替代尝试2

const dbname = 'my_db';
await pool.request()
    .input('dbname', sql.VarChar, dbname)
    .query('CREATE DATABASE @dbname');

失败:收到RequestError错误,提示“@dbname附近有语法错误”及对应栈追踪。

替代尝试3

const dbname = 'my_db';
await pool.request().query(`CREATE DATABASE [${dbname}]`);

部分成功:成功创建my_db数据库,但未对名称做参数化安全处理,相关问题在GitHub议题#1568中被提及。

替代尝试4

const dbname = 'my_db';
await pool.request().query`
    DECLARE @_dbname VARCHAR(128) = ${dbname};
    EXEC('CREATE DATABASE ' + @_dbname);`;

成功:通过动态SQL执行,但需要额外添加语句,更像临时方案。

执行CREATE USER...FOR LOGIN...等命令时也遇到类似问题。目前仅尝试3和4有效,但都存在不足,请问是否有官方的参数化方案?

软件版本

  • node: v20.9.0
  • npm: 10.1.0
  • mssql: v11.0.0
  • SQL Server 2019 Express(64-bit)
  • OS: Windows Server 2016 Datacenter

内容的提问来源于stack exchange,提问作者Jasel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 08:33:18