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

SQL Server从另一表取值作为列名新增列报2021附近语法错误如何解决

错误原因

拼接动态SQL时,2021-09-08这类带横杠的日期作为列名属于特殊标识符,SQL Server会默认将横杠解析为减号运算符,不会把整段字符串识别为一个完整的列名,因此解析到开头的2021时就会触发语法报错。

修复方案

将动态拼接的列名用方括号[]包裹即可,同时建议添加非空判断,避免stattable1中不存在Adat=1的记录时执行无效的ALTER语句,修复后的代码如下:

DECLARE @Data nvarchar(20) 
SELECT @Data = Date
FROM stattable1 
WHERE Adat=1

IF @Data IS NOT NULL
BEGIN
    DECLARE @sql nvarchar(1000)
    SET @sql = 'ALTER TABLE altertable1 ADD [' + @Data  + '] nvarchar(20)'
    EXEC (@sql)
END
注意事项
  • 后续查询、修改该动态命名的列时,同样需要用方括号包裹列名,示例:SELECT [2021-09-08] FROM altertable1
  • 按日期动态生成列的设计会大幅提升后续业务代码的维护复杂度,非特殊需求不推荐使用该方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 00:12:02