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

SQL Server临时表SELECT语句不识别列名 如何调整语法正常运行

SQL语句修正方案

现有代码错误清单

  • 语法函数不兼容:SQL Server 不支持SELECT子句直接使用IF()做逻辑判断,需替换为IIF()(2012及以上版本支持)或通用的CASE WHEN语法
  • 聚合函数规则不满足:使用MAX(Score)聚合函数时,未对非聚合列FirstPlayer、SecondPlayer配置GROUP BY分组规则,不符合SQL语法规范
  • 引用不存在字段:WHERE条件中的Points列未在临时表#GameScores中定义,对应分数字段应为Score
  • 字符串引号使用错误:SQL Server 字符串常量需用单引号包裹,原代码中"JO%"的双引号会被识别为对象标识符,导致匹配逻辑失效
  • 智能感知缓存问题:语法修正后如果Azure Data Studio仍显示列名红色下划线,按快捷键Ctrl+Shift+R刷新智能感知缓存即可消除

修正后可运行代码(按「保留每行记录,对同玩家组合的最高得分额外加20」的常见需求实现)

IF OBJECT_ID('tempdb.dbo.#GameScores','U') IS NOT NULL
    DROP TABLE #GameScores;
GO

CREATE TABLE #GameScores
(
    FirstPlayer  VARCHAR(10),
    SecondPlayer VARCHAR(10),
    Score        INTEGER
);
GO

INSERT INTO #GameScores 
VALUES ('Joe','Ryan', 120),
       ('Sue', 'Jackie', 200),
       ('Ryan', 'Sue', 50),
       ('Ryan', 'Joe', 100);
GO

SELECT DISTINCT 
    FirstPlayer,
    SecondPlayer, 
    CASE 
        WHEN Score = MAX(Score) OVER (PARTITION BY FirstPlayer, SecondPlayer) 
        THEN MAX(Score) OVER (PARTITION BY FirstPlayer, SecondPlayer) + 20 
        ELSE Score 
    END AS Score
FROM 
    #GameScores
WHERE 
    SecondPlayer NOT LIKE 'JO%'
    OR Score <> 100

如果需要按玩家组合聚合仅返回单条统计结果,可将窗口函数替换为GROUP BY FirstPlayer, SecondPlayer搭配聚合函数实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 18:36:05