Ошибка в динамическом запросе SQL

Пишу динамическую процедуру для бд, но выпадает ошибка

Msg 102, Level 15, State 1, Line 9 Неправильный синтаксис около конструкции "Уволенный".

В чем может быть проблема? Третий день изучаю SQL, еще многого не знаю.

Спасибо заранее!!! При этом sp_executesql подчеркнута волнистой линией и пишет, что процедура содержит неразрешенную ссылку.

status содержит в себе 2 поля - id и name status.name Содержит в себе Действующий работник и Уволенный

CREATE PROCEDURE [dbo].[getStatistics]
    @Status varchar(100) = 'Уволенный'
AS

DECLARE @statement NVARCHAR(MAX),

@function NVARCHAR(100)

IF (@Status = 'Действующий работник') SET @function = 'persons.date_employ'
IF (@Status = 'Уволенный') SET @function = 'persons.date_uneploy'


SET @statement = 
    'SELECT CONVERT(date, ' + @function + ') AS Date, persons.last_name, persons.first_name, persons.second_name,
    status.name AS status
    FROM persons
    JOIN status ON status.id = persons.id_status

    WHERE
        CASE
            WHEN
                (status.name in ' + (@Status) + ') THEN 1
            ELSE 0
        END = 1 ' +

' GROUP BY ' + @function + ' , persons.last_name, persons.first_name, persons.second_name, status.name'
EXECUTE sp_executesql @statement

Решение нашел

CREATE PROCEDURE [dbo].[getStatistics]
@Status varchar(100) = 'Действующий работник'
AS
BEGIN
DECLARE @statement NVARCHAR(MAX),
@function NVARCHAR(100)

IF (@Status = 'Действующий работник')
SET @function = 'persons.date_employ'
ELSE IF (@Status = 'Уволенный')
SET @function = 'persons.date_uneploy'

SET @statement = N'
SELECT CONVERT(date, ' + @function + ') AS Date,
persons.last_name,
persons.first_name,
persons.second_name,
status.name AS status
FROM persons
JOIN status ON status.id = persons.id_status
WHERE status.name = @Status
GROUP BY ' + @function + ',
persons.last_name,
persons.first_name,
persons.second_name,
status.name'

EXEC sp_executesql @statement, N'@Status varchar(100)', @Status
END

Ответы (0 шт):