Dal commento di KM sopra ...
so che non ha precisato che è separati da virgola, ma se fosse un file CSV o anche se lo avete spazio separato che si possa fare quanto segue.
DECLARE @SomeTest varchar(100) --used to hold your values
SET @SomeTest = (SELECT '68,72,103') --just some test data
SELECT
LoginID --change to your column names
FROM
Login --change to your source table name
INNER JOIN
( SELECT
*
FROM fn_IntegerInList(@SomeTest)
) n
ON
n.InListID = Login.LoginID
ORDER BY
n.SortOrder
e quindi creare 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,@[email protected])
insert into @tblINList values (@subs, @sort)
set @startpos = @ctr+1
end
if @ctr = @length
begin
select @subs = substring(@InListString,@startpos,@[email protected])
insert into @tblINList values (@subs, @sort)
end
set @ctr = @ctr +1
set @sort = @sort + 1
end
RETURN
END
In questo modo la funzione crea una tabella che contiene un tipo di ordinamento e cioè, SortOrder
e l'ID o il numero che si sta passando in Naturalmente, è possibile modificare questo. in modo che si cerchi lo spazio
anziché i valori ,
. Altrimenti, Martin ha la giusta idea nella sua risposta. Si prega di notare nel mio esempio che sto usando uno dei miei tavoli, quindi sarà necessario modificare il nome Login
per qualsiasi cosa si tratti.
+1 o se con csv, dividere in una variabile @table con una colonna di identità a cui è possibile partecipare e quindi ordinare per –
@KM in modo che OP debba scrivere una procedura di archiviazione per una semplice selezione –
@LuisSiquot - Loro stanno già utilizzando una stored procedure. Ma dovrebbero usare query parametrizzate anche se non lo fossero. Ci sono un sacco di funzioni valutate su split table che funzionano come suggerito da KM a cui l'OP potrebbe aderire, ma se la compatibilità del 2005 non è necessaria, i TVP saranno migliori. –