Reputation: 157
I am getting this error when using a WITH clause
Incorrect syntax near the keyword 'with'. If this statement is a common table expression, an xmlnamespaces clause or a change tracking context clause, the previous statement must be terminated with a semicolon.
Msg 102, Level 15, State 1, Procedure ViewComplaintbyProfile, Line 29
Incorrect syntax near ','.
Here is my Procedure
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
Please help
Thanks Sun
Upvotes: 6
Views: 20805
Reputation: 57093
The way forwards is to terminate every SQL statement with a semicolon e.g. (snipping the CTE definitions to aid readability):
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
Upvotes: 0
Reputation: 755411
The error message already tells you what to do:
.... the previous statement must be terminated with a semicolon.
Try putting the WITH
statement into a block of its own by prepending it by a semicolon:
ALTER PROCEDURE [dbo].[ViewComplaintbyProfile]
( @ID int
)
AS
BEGIN
SET NOCOUNT ON
; WITH one AS ......
.........
Upvotes: 6