I have a simple SQL script, and I want to parameterize the sort by:
CREATE OR ALTER PROCEDURE dbo.GetLog
@SortDirection NVARCHAR(4),
@SortBy NVARCHAR(100)
AS
BEGIN
SELECT Id
FROM dbo.TestLog
ORDER BY
CASE WHEN @SortDirection = 'asc'
THEN
CASE
WHEN @SortBy = 'Id' THEN Id -- Id is an INT
WHEN @SortBy = 'IsDeleted' THEN Deleted -- Deleted is a BIT
WHEN @SortBy = 'Description' THEN Description -- Description is a NVARCHAR
END
END ASC,
CASE
WHEN @SortDirection = 'desc'
THEN
CASE
WHEN @SortBy = 'Id' THEN Id -- Id is an INT
WHEN @SortBy = 'IsDeleted' THEN Deleted -- Deleted is a BIT
WHEN @SortBy = 'Description' THEN Description -- Description is a NVARCHAR
END
END DESC
If @SortBy = 'Id', everything works fine. However, if @SortBy is anything else, then an exception will be thrown:
Conversion failed when converting the varchar value '12A' to data type bit
Is there anyway to fix this issue? Thank you.