Теперь я вижу, у вас есть точка с запятой в конце вашей декларации CTE. Вы не можете сделать это, так как это завершает утверждение. Попробуйте это:
ALTER FUNCTION dbo.S(@Name varchar(100))
RETURNS VARCHAR(25)
AS
BEGIN
DECLARE @Suffix VARCHAR(25);
WITH SearchTerms(Term) AS
(
SELECT ' I '
UNION ALL SELECT ' II '
UNION ALL SELECT ' III '
UNION ALL SELECT ' MD '
UNION ALL SELECT ' M.D '
UNION ALL SELECT ' M.D. '
UNION ALL SELECT ' D.O '
UNION ALL SELECT ' D.O. '
UNION ALL SELECT ' DO '
)
SELECT @Suffix = Term
FROM SearchTerms
WHERE CHARINDEX(Term, ' ' + @Name + ' ') > 0;
RETURN (LTRIM(RTRIM(@Suffix)));
END
GO
РЕДАКТИРОВАТЬ на основе новой информации, вот табличная функция, которая возвращает все результаты:
CREATE FUNCTION dbo.T
(
@Name VARCHAR(100)
)
RETURNS TABLE
AS
RETURN
(
SELECT
Term = CONVERT(VARCHAR(25), LTRIM(RTRIM(Term)))
FROM
(
SELECT Term = ' I '
UNION ALL SELECT ' II '
UNION ALL SELECT ' III '
UNION ALL SELECT ' MD '
UNION ALL SELECT ' M.D '
UNION ALL SELECT ' M.D. '
UNION ALL SELECT ' D.O '
UNION ALL SELECT ' D.O. '
UNION ALL SELECT ' DO '
) AS Terms
WHERE CHARINDEX(Term, ' ' + @Name + ' ') > 0
);
GO
SELECT Term FROM dbo.T('Terry Allen MD III');