使用WITH子句
时出现此错误关键字'with'附近的语法不正确。如果这个陈述是 公用表表达式,xmlnamespaces子句或更改跟踪 context子句,前一个语句必须以a结尾 分号。
附近的语法不正确
消息102,级别15,状态1,过程ViewComplaintbyProfile,第29行
','。
这是我的程序
ALTER PROCEDURE [dbo].[ViewComplaintbyProfile]
( @ID int
)
AS
BEGIN
SET NOCOUNT ON
WITH
one as
(Select sno = ROW_NUMBER()OVER (order by complaint_id), Complaint_Id, ComplainantName,ComplaintType_id, complaintProfileId,ComplainantProfileId,Description,
Email, Date_Complained, Status, AdminComments, Phone, Evidence,
PLevel = CASE PriorityLevel_id WHEN '1' THEN 'High'
WHEN '2' THEN 'Medium'
WHEN '3' THEN 'Low' END ,
Complaint_Type = CASE ComplaintType_ID WHEN '1' THEN 'Purchased Contact has incorrect details'
WHEN '2' THEN 'Contacted Profile is already married'
WHEN '3' THEN 'Suspect the Profile has fradudelent contect/credentials'
WHEN '4' THEN 'Suspect the Profile has fake picture'
WHEN '5' THEN 'Profile has obscene or inappropriate content'
WHEN '6' THEN 'Report harassment, offensive remarks, etc., by user'
WHEN '7' THEN 'Miscellaneous issue' END,
Status1 = CASE Status WHEN 'New' THEN 1
WHEN 'In-Progress' THEN 2
WHEN 'Closed' THEN 3
END
from Complaints),
two as
(SELECT sno = ROW_NUMBER()OVER (order by complaint_id), Complaint.complaintProfileId,
CASE
WHEN cast(mmbProfiles.MMB_Id as varchar) IS NOT NULL THEN cast(mmbProfiles.MMB_Id as varchar)
WHEN cast(UPPMembership.profile_id as varchar) IS NOT NULL THEN 'UPP'
ELSE 'Not found'
END as MMBId
FROM Complaints Complaint
LEFT JOIN MMBMembership
ON MMBMembership.profile_id = Complaint.complaintProfileId
left JOIN MMB_BusinessProfiles mmbProfiles
ON mmbProfiles.MMB_id = MMBMembership.MMB_id
LEFT JOIN UPPMembership
ON UPPMembership.profile_id = Complaint.complaintProfileId)
SELECT one.*,two.MMBId FROM one join two
on one.sno = two.sno
WHERE (ComplaintType_id = @ID)
END
请帮忙
由于 太阳
答案 0 :(得分:6)
错误消息已告诉您该怎么做:
....之前的声明必须以分号结束。
尝试将WITH
语句放在它自己的块中,方法是用分号前缀:
ALTER PROCEDURE [dbo].[ViewComplaintbyProfile]
( @ID int
)
AS
BEGIN
SET NOCOUNT ON
; WITH one AS ......
.........
答案 1 :(得分:0)
前进的方法是使用分号终止每个 SQL语句,例如(剪断CTE定义以提高可读性):
ALTER PROCEDURE [dbo].[ViewComplaintbyProfile]
( @ID INT
)
AS
BEGIN; <-- HERE
SET NOCOUNT ON; -- <-- HERE
WITH one AS
(...),
two AS
(...)
SELECT one.*, two.MMBId
FROM one JOIN two
ON one.sno = two.sno
WHERE (ComplaintType_id = @ID); -- <-- HERE
END; -- <-- HERE