关键字 'with' 附近有语法错误。如果此语句是公用表表达式、xmlnamespaces 子句或者更改跟踪上下文子句,那么前一个语句必须以分号结尾

问题SQL语句


DECLARE @YYMM VARCHAR(10) = '202304'
WITH
EmpDayData as
(
	SELECT	
		EmpID,SUM(ISNULL(WorkTime,0)+isnull(OverTime1,0)+isnull(OverTime2,0)+isnull(OverTime3,0)) AS [总工时]
	FROM AttDayData
	WHERE CONVERT(VARCHAR(6),YYMMDD,112) = @YYMM
	AND EmpID IN (
		SELECT A.EmpID FROM (
			SELECT	EmpID,PartNo FROM PerEmpDayDoc
			WHERE CONVERT(VARCHAR(6),YYMMDD,112) = @YYMM
			GROUP BY EmpID,PartNo
		) A
		GROUP BY A.EmpID HAVING COUNT(A.EmpID) > 1
	)
	GROUP BY EmpID
)

SELECT * FROM EmpDayData

问题原因

在异常提示中已经说的很明白了,“前一个语句必须以分号结尾”它是指需要在with前面添加一个分号,不是在with语句后添加。

修改后的SQL如下


DECLARE @YYMM VARCHAR(10) = '202304'



;WITH
EmpDayData as
(
	SELECT	
		EmpID,SUM(ISNULL(WorkTime,0)+isnull(OverTime1,0)+isnull(OverTime2,0)+isnull(OverTime3,0)) AS [总工时]
	FROM AttDayData
	WHERE CONVERT(VARCHAR(6),YYMMDD,112) = @YYMM
	AND EmpID IN (
		SELECT A.EmpID FROM (
			SELECT	EmpID,PartNo FROM PerEmpDayDoc
			WHERE CONVERT(VARCHAR(6),YYMMDD,112) = @YYMM
			GROUP BY EmpID,PartNo
		) A
		GROUP BY A.EmpID HAVING COUNT(A.EmpID) > 1
	)
	GROUP BY EmpID
)

SELECT * FROM EmpDayData

修改后问题解决

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐