根据KM上面的评论...
我知道你没有说明它是逗号分隔的,但如果它是CSV文件,甚至是空格分隔的,你可以采取以下方法。
DECLARE @SomeTest varchar(100)
SET @SomeTest = (SELECT '68,72,103')
SELECT
LoginID
FROM
Login
INNER JOIN
( SELECT
*
FROM fn_IntegerInList(@SomeTest)
) n
ON
n.InListID = Login.LoginID
ORDER BY
n.SortOrder
然后创建fn_IntegerInList()
函数:
CREATE FUNCTION [dbo].[fn_IntegerInList] (@InListString ntext)
RETURNS @tblINList TABLE (InListID int, SortOrder int)
AS
BEGIN
declare @length int
declare @startpos int
declare @ctr int
declare @val nvarchar(50)
declare @subs nvarchar(50)
declare @sort int
set @sort=1
set @startpos = 1
set @ctr = 1
select @length = datalength(@InListString)
while (@ctr <= @length)
begin
select @val = substring(@InListString,@ctr,1)
if @val = N','
begin
select @subs = substring(@InListString,@startpos,@ctr-@startpos)
insert into @tblINList values (@subs, @sort)
set @startpos = @ctr+1
end
if @ctr = @length
begin
select @subs = substring(@InListString,@startpos,@ctr-@startpos)
insert into @tblINList values (@subs, @sort)
end
set @ctr = @ctr +1
set @sort = @sort + 1
end
RETURN
END
这样,您的函数创建一个包含排序顺序(即
SortOrder
)和您传入的 ID 或数字的表格。当然,您可以修改此设置,以便查找空格
而不是逗号
,
值。否则 Martin 在他的答案中提出了正确的想法。请注意,在我的示例中,我正在使用其中一个表格,因此您需要将名称
Login
更改为您正在处理的内容。