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

SQL Server报错:Incorrect syntax near '(',求CERINTA5语法修正及模式复用可行性

解决SQL语法错误:Incorrect syntax near '('. Expecting EDGE_TYPE or ID.

从你代码里的IDENTITY、CURRENT_TIMESTAMP这些语法能判断出,你用的是SQL Server数据库——而SQL Server不支持CREATE TABLE ... AS (SELECT ...)这种MySQL/PostgreSQL风格的语法,这就是触发错误的核心原因。

两种可行解决方案,其中一种可直接复用CERINTA4的查询模式

方案1:改用SQL Server支持的语法创建中间表

如果你确实需要保留prop2veh这个中间表,把CERINTA5的创建语句替换成SQL Server原生支持的SELECT ... INTO写法:

-- 替换原CREATE TABLE语句,用SELECT INTO创建新表并插入数据
SELECT proprietate.PERSOANA_ID, proprietate.NR_VEHICUL
INTO prop2veh
FROM proprietate 
INNER JOIN vehicul ON proprietate.NR_VEHICUL=vehicul.NR_VEHICUL;

-- 原统计查询可直接保留
SELECT PERSOANA_ID, Count(*) As total 
FROM prop2veh 
Group By PERSOANA_ID 
Having Count(*) > 2;

方案2:复用CERINTA4的直接查询模式(更高效,无需中间表)

CERINTA4的核心逻辑是直接通过关联查询获取结果,不依赖额外中间表,你可以把CERINTA5的统计逻辑合并成一个子查询,完全跳过prop2veh表的创建:

SELECT PERSOANA_ID, Count(*) As total 
FROM (
    -- 把原中间表的查询逻辑作为子查询,和CERINTA4的关联写法一致
    SELECT proprietate.PERSOANA_ID, proprietate.NR_VEHICUL 
    FROM proprietate 
    INNER JOIN vehicul ON proprietate.NR_VEHICUL=vehicul.NR_VEHICUL
) AS prop2veh
Group By PERSOANA_ID 
Having Count(*) > 2;

这个写法完全复用了CERINTA4的“直接关联查询”模式,既避免了语法错误,还省去了创建中间表的额外开销。

错误原因补充

CREATE TABLE ... AS SELECT是ANSI SQL标准写法,但SQL Server并未实现该语法,它用SELECT ... INTO来完成“从查询结果创建新表”的功能。错误提示里的Expecting EDGE_TYPE or ID是SQL Server解析器对语法结构的误判,本质是不识别CREATE TABLE ... AS的写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:58:28