Единственный способ сделать это - использовать динамический SQL (как упоминает Гордон). Если это запрос, а не функция view, тогда вы можете сделать это:
DECLARE @subType tinyint = 3;
DECLARE @SQL nvarchar(MAX);
SET @SQL = N'SELECT ' +
STUFF(CASE WHEN @subType IN (1,2) THEN N',' + NCHAR(13) + NCHAR(10) + N' id' ELSE N'' END +
CASE WHEN @subType = 3 THEN N',' + NCHAR(13) + NCHAR(10) + N' [name]' ELSE N'' END +
CASE WHEN @subType IN (3,2) THEN N',' + NCHAR(13) + NCHAR(10) + N' [address]' ELSE N'' END, 1, 10,N'') + NCHAR(13) + NCHAR(10) +
N'FROM YourTable;';
PRINT @SQL; --Your debugging best friend.
--EXEC sp_executesql @SQL; --Uncomment to run the statement
Но, если запрос поступает с уровня представления, то в действительности он должен обрабатывать отображаемые столбцы, а не SQL Server
Если вы также передаете параметры в WHERE
вашего запроса, убедитесь, что вы параметризовали вызов sp_executesql
; не вводить значения параметров в динамический оператор.