Не беспокойся. Просто используйте обычную логику:
where dbo.StockTransfer.BranchId = @branchId and
( (IsNumeric(@roleId) = 1 and
dbo.StockTransfer.StatusId <> 12
) or
(IsNumeric(@roleId) = 0 and
dbo.StockTransfer.StatusId not in (12, 13)
)
)
Это не обрабатывает NULL
значения, но это может быть легко добавлено.
На самом деле, я мог бы упростить это до:
where dbo.StockTransfer.BranchId = @branchId and
dbo.StockTransfer.StatusId <> 12 and
(IsNumeric(@roleId) = 1 or
dbo.StockTransfer.StatusId <> 13
)