检索订单中给定的多个 ID 的值
Retrieve values for multiple ids given in the order
我有一个使用 CSV 接受多个 ID 的存储过程。我想按照给定 ID 的顺序从 table 中检索值。我目前使用的存储过程是
CREATE procedure [dbo].[Proc1]
@Userid VARCHAR(MAX)=NULL
as
begin
set nocount on;
DECLARE @Useridord TABLE (Userid VARCHAR(MAX),Position int identity(1,1));
INSERT INTO @Useridord
SELECT item
FROM [dbo].[Split] (@Userid, ',')
select * from User where User.UserId IN (select TOP 100 Percent Userid from @Useridord ORDER BY Position)
end
GO
我想做的是从 csv 中插入值到临时 table 添加订单值作为位置。由于我使用 Orderby Position,它仅在内部 select 中实现。但是输出是按照 table 中的顺序给出的。我知道在外部 select 语句中使用 orderby,但我不知道执行它的正确语法。谁能帮帮我?
使用INNER JOIN
怎么样?
SELECT
u.*
FROM User u
INNER JOIN @Useridord uo
ON uo.Userid = u.UserId
ORDER BY uo.Position
我相信你应该保证函数内的位置,如:
create function fnSplit(@users varchar(100), @del char(10))
returns @t table(userid int, pos int) as
begin
insert into @t values(3,1),(2,2),(1,3)
return
end
然后你可以直接加入函数结果,如:
Select u.* from users u
join fnSplit('','') s on u.id = s.userid
order by s.pos
这里是fiddlehttp://sqlfiddle.com/#!6/a8acc/4
我有一个使用 CSV 接受多个 ID 的存储过程。我想按照给定 ID 的顺序从 table 中检索值。我目前使用的存储过程是
CREATE procedure [dbo].[Proc1]
@Userid VARCHAR(MAX)=NULL
as
begin
set nocount on;
DECLARE @Useridord TABLE (Userid VARCHAR(MAX),Position int identity(1,1));
INSERT INTO @Useridord
SELECT item
FROM [dbo].[Split] (@Userid, ',')
select * from User where User.UserId IN (select TOP 100 Percent Userid from @Useridord ORDER BY Position)
end
GO
我想做的是从 csv 中插入值到临时 table 添加订单值作为位置。由于我使用 Orderby Position,它仅在内部 select 中实现。但是输出是按照 table 中的顺序给出的。我知道在外部 select 语句中使用 orderby,但我不知道执行它的正确语法。谁能帮帮我?
使用INNER JOIN
怎么样?
SELECT
u.*
FROM User u
INNER JOIN @Useridord uo
ON uo.Userid = u.UserId
ORDER BY uo.Position
我相信你应该保证函数内的位置,如:
create function fnSplit(@users varchar(100), @del char(10))
returns @t table(userid int, pos int) as
begin
insert into @t values(3,1),(2,2),(1,3)
return
end
然后你可以直接加入函数结果,如:
Select u.* from users u
join fnSplit('','') s on u.id = s.userid
order by s.pos
这里是fiddlehttp://sqlfiddle.com/#!6/a8acc/4