создать таблицу с идентификаторами, а затем присоединиться к столу, упорядочивание другого столбца идентификаторов.
Предположительно, если у вас есть идентификатор 10k, они не будут введены вручную, поэтому, возможно, возможно построить сортировку/объединение таблицы по-другому. Также должны быть более эффективными, чем при использовании большого in
create table #tempID(idSort int identity(1,1), id int)
insert into #tempID(id)
select 12 union all
select 6 union all
select 4 union all
select 3 union all
select 13
select * from table t1
inner join #tempID t2
on t1.id = t2.id
order by t2.idSort
Для создания сортировки таблицы динамически, вам нужна эта функция (или аналогичный):
create FUNCTION [dbo].[comma_sep_var_intSort] (@list nvarchar(MAX))
RETURNS @tbl TABLE (idSort int identity(1,1), id int NOT NULL
) AS
BEGIN
DECLARE @pos int,
@nextpos int,
@valuelen int
SELECT @pos = 0, @nextpos = 1
WHILE @nextpos > 0
BEGIN
SELECT @nextpos = charindex(',', @list, @pos + 1)
SELECT @valuelen = CASE WHEN @nextpos > 0
THEN @nextpos
ELSE len(@list) + 1
END - @pos - 1
INSERT @tbl (id)
VALUES (cast(substring(@list, @pos + 1, @valuelen) as int))
SELECT @pos = @nextpos
END
RETURN
END
Тогда присоединиться, как это:
declare @idList varchar(max)
set @idLIst = '12,6,4,3,13'
select * from table t1
inner join [dbo].[comma_sep_var_int](@idList) t2
on t1.id = t2.id
order by t2.idSort
Вставка их в таблицу параметров temp или table с двумя столбцами. 'id' и' SortOrder' и присоединяться, а не использовать 'in'. Затем вы можете просто заказать второй столбец. –