将结果返回“相同顺序”作为输入参数

时间:2014-09-18 17:23:25

标签: tsql sql-server-2012

在下面的查询中,我该怎么做才能以与输入参数相同的顺序获得结果。

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

2 个答案:

答案 0 :(得分:2)

  1. 创建本地临时表#numbers。确保它具有自动增量标识列。

  2. 以正确的顺序将@NumList中的数字插入#numbers

    • 在逗号处拆分@NumList并将各个值转换为行。参见例如this question了解如何执行此操作。
    • 或者,将@NumListVARCHAR - 类型变量转换为表变量。 (这样,您甚至可以直接使用它,即取代#numbers。)
  3. 修改您的查询,以便tbl a中的行加入#numbers。此外,添加ORDER BY子句,按#numbers的自动增量标识列对结果进行排序。

答案 1 :(得分:2)

如果@NumList包含唯一值,您可以使用CharIndex在参数ex中找到它们的位置:

order by charindex(a.num, @NumList)