Ошибка в динамическом запросе 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