如果我的存储过程采用以下参数:
@orderByColumn
@sortDir
@columnName
@filter
如何通过特定的@orderByColumn
和@sortDir
参数获取存储过程顺序?
此外,如果有WHERE
子句并使用@columnName
参数和@filter
参数呢?
如果可以避免,我不想做任何动态SQL连接。
例如,我正在考虑以下内容:
SELECT
[col1], [col2], [col3]
FROM
[myTable]
WHERE
@columnName = @filter
ORDER BY
@orderByColumn @sortDIR
但当然,这不是正确的方法。
非常感谢!
答案 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不适合字符串操作。