在下面的查询中,我该怎么做才能以与输入参数相同的顺序获得结果。
DECLARE @sql varchar(max)
SET @sql = 'SELECT a.num AS Num, a.photo as Photo , row_number() over (order by (select 0)) rn
FROM tbl a (nolock) WHERE a.num IN (' + @NumList + ') '
我传入以下的@NumList参数(作为示例):
1-235,1-892,2-847,1-479,3-890,1-239,2-892
这样可以正常工作,但我需要在'SAME ORDER'中返回结果作为输入参数。
我创建了SQL Fiddle
答案 0 :(得分:2)
创建本地临时表#numbers
。确保它具有自动增量标识列。
以正确的顺序将@NumList
中的数字插入#numbers
。
@NumList
并将各个值转换为行。参见例如this question了解如何执行此操作。@NumList
从VARCHAR
- 类型变量转换为表变量。 (这样,您甚至可以直接使用它,即取代#numbers
。)修改您的查询,以便tbl a
中的行加入#numbers
。此外,添加ORDER BY
子句,按#numbers
的自动增量标识列对结果进行排序。
答案 1 :(得分:2)
如果@NumList包含唯一值,您可以使用CharIndex在参数ex中找到它们的位置:
order by charindex(a.num, @NumList)