使用参数化列过滤器和列排序方向

时间:2014-09-16 07:50:48

标签: sql-server sql-server-2008

如果我的存储过程采用以下参数:

@orderByColumn
@sortDir
@columnName
@filter

如何通过特定的@orderByColumn@sortDir参数获取存储过程顺序?

此外,如果有WHERE子句并使用@columnName参数和@filter参数呢?

如果可以避免,我不想做任何动态SQL连接。

例如,我正在考虑以下内容:

SELECT 
    [col1], [col2], [col3]
FROM 
    [myTable]
WHERE 
    @columnName = @filter
ORDER BY 
    @orderByColumn @sortDIR

但当然,这不是正确的方法。

非常感谢!

1 个答案:

答案 0 :(得分:1)

当优化器创建查询计划时,它可以改变使用的值,但它必须知道表和排序。因此无法对列和表名进行参数化。

您可以使用动态SQL:

declare @sql nvarchar(max)
set @sql = 'select * from dbo.YourTable order by ' + @orderByColumn

或者使用一些技巧,因此值而不是列名确定排序顺序:

select  *
from    dbo.YourTable
order by
        case @orderByColumn
        when 'col1' then col1
        when 'col2' then col2
        when 'col3' then col3
        end

根据我的经验,通过生成客户端的SQL查询,您将获得最合理的代码。 T-SQL不适合字符串操作。

相关问题