您可以做到这一点的唯一方法是使用动态 SQL(正如 Gordon 提到的)。如果这是一个查询,而不是一个函数,视图,那么你可以这样做:
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
; 不要将参数值注入到动态语句中。