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

使用动态SQL创建以当日日期时间命名的表时遇语法错误求助

解决SQL Server中特殊格式表名创建报错问题

问题出在SQL Server的标识符命名规则上:常规标识符不能以数字开头,也不能包含-这类特殊字符。当你用2023-11-06-12-10或2023作为表名时,直接拼接SQL语句会让解析器把开头的数字当成数值,导致语法错误。

解决方法很简单,用QUOTENAME()函数对表名进行处理——它会自动给标识符加上方括号[],将其转换为SQL Server认可的分隔标识符,这样就能正常执行创建操作。

修改后的完整代码:

DECLARE @MyTableName sysname;
DECLARE @DynamicSQL nvarchar(max);
SET @MyTableName = FORMAT (GETDATE(), 'yyyy-MM-dd-hh-mm');
SET @DynamicSQL = N'CREATE TABLE ' + QUOTENAME(@MyTableName) + ' (DocIDNo varchar(255))';
EXEC sp_executesql @DynamicSQL;

补充说明

  • 手动给表名加方括号也能解决问题(比如写成[2023-11-06-12-10]),但QUOTENAME()更安全:如果表名包含特殊字符(比如]),它会自动转义,避免语法错误或SQL注入风险。
  • 若偏好使用双引号包裹标识符,需先执行SET QUOTED_IDENTIFIER ON;,再将表名用双引号包裹,但方括号是SQL Server默认支持的格式,兼容性更强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 01:11:03