Вы не END
блокируете процедуру. Попробуйте:
CREATE PROCEDURE myProcedure
@StartDate Date,
...
@StatusID int
AS
BEGIN
DECLARE @query nvarchar(4000);
SET @query = ...
EXEC sp_sqlexec @query;
END;
Обратите внимание на END
в конце.
Хотя есть и другие проблемы:
Вложенность CASE
выражение может быть упрощено. Вы не уверены, что входы правильно экранированы.
Вы должны использовать sp_executesql
с параметрами вместо конкатенации.
Но, скорее всего, динамика c SQL здесь действительно не нужна. Проверьте:
SELECT lrm.statusid,
FROM cr_informations cri
LEFT JOIN ...
WHERE (@LicenseRequestID IS NULL
OR lrm.id LIKE @LicenseRequestID + '%')
AND (@CRNumber IS NULL
OR cri.crnumber LIKE @CRNumber + '%')
AND (@StatusID IS NULL
OR lrm.statusid LIKE @StatusID + '%');
Это должно делать то, что вы хотите без динамического c SQL.
Операции LIKE
с целыми числами сомнительны. Вы действительно хотите включить, например, 12345
, когда целочисленный параметр равен 1
? Вы, вероятно, просто хотите =
для них.