Внутреннее утверждение If находится не в том месте. Формат с
With <col> as
(
---
)
SELECT ---
Кроме того, я не думаю, что у Нуллифа есть цель здесь. В общем, если вы можете писать без использования функции, не используйте функцию (из соображений производительности)
Окончательная процедура будет:
CREATE PROCEDURE sp
@id int,
@filter varchar(255) = NULL
AS
BEGIN
IF (@id != 0)
BEGIN
IF (@filter = '')
BEGIN
WITH cte AS
(
--SELECT here...
)
SELECT *
FROM cte;
END
END
END