Từ nhận xét của KM ở trên ...
Tôi biết bạn không nói rằng nó được phân cách bằng dấu phẩy, nhưng nếu đó là CSV hoặc thậm chí nếu bạn có không gian riêng biệt, bạn có thể làm như sau.
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
Và sau đó tạo 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
Bằng cách này chức năng của bạn tạo ra một bảng chứa một thứ tự sắp xếp cụ thể là, SortOrder
và ID hoặc số bạn đang đi qua trong Bạn có thể dĩ nhiên sửa đổi này. để bạn đang tìm kiếm không gian
thay vì giá trị ,
. Nếu không, Martin có ý tưởng đúng trong câu trả lời của anh ta. Xin lưu ý trong ví dụ của tôi Tôi đang sử dụng một trong các bảng của tôi, vì vậy bạn sẽ cần thay đổi tên Login
thành bất kỳ điều gì bạn đang xử lý.
+1 hoặc nếu bằng csv, được chia thành biến @table với cột nhận dạng mà bạn có thể tham gia và sau đó đặt hàng theo số –
@KM nên OP cần viết thủ tục cửa hàng để chọn đơn giản –
@LuisSiquot - Chúng đang sử dụng quy trình được lưu trữ. Nhưng họ nên sử dụng truy vấn được tham số ngay cả khi họ không truy vấn. Có rất nhiều chức năng chia bảng có giá trị xung quanh hoạt động như đề xuất của KM rằng OP có thể tham gia vào nhưng nếu khả năng tương thích 2005 không cần thiết, TVP sẽ tốt hơn. –