遍历每条记录

时间:2019-09-11 17:34:21

标签: sql asp.net sql-server vb.net sql-server-2012

我有一个ASP.NET页,该页重复调用一个SQL存储过程,该存储过程从表Hearings_Users中提取随机userID。现在,我需要按顺序提取每个UserID。我将向下浏览表中的UserID列表,直到VB函数停止调用它为止。我不确定如何在SQL中执行此操作。谢谢

Private Function GetRandomUser() As String
    Dim UserID As String = ""
    cmd = New SqlCommand("p_Hearings_ActiveUsers", con)
    cmd.CommandType = CommandType.StoredProcedure
    ....
        While dr.Read()
                UserID = dr("UserID")
            End While
        End Using   
    ....     
    Return UserID
End Function

--p_Hearings_ActiveUsers
SELECT TOP 1 UserID FROM Hearings_Users
WHERE Active = 1
ORDER BY NEWID()

1 个答案:

答案 0 :(得分:1)

我将创建一个新的存储过程,该过程使用最后一个userID的参数,并按顺序返回下一个

CREATE PROCEDURE spNextUser(@LastUserID INT) 

该主体类似于p_Hearings_ActiveUsers,只是它的条件是ID大于上次使用的

SELECT TOP 1 UserID 
FROM Hearings_Users
WHERE Active = 1 
    AND UserID > @LastUserID
ORDER BY UserID 

从代码中调用时,您需要在命令中添加参数

Dim paramUserID As SqlParameter = New SqlParameter("LastUserID", SqlDbType.Integer)
paramUserID.Value = dr(UserID)
cmd.Parameters.Add(paramUserID)

但是它就像您已经打过的电话

这种方法可确保状态存储在应用程序中,而不是服务器端,因此,如果要遍历2个实例,它们不会互相交叉

效率提示:您无需在每次循环迭代时重新定义参数,您可以在循环上方和循环内部定义参数,只需更新其值即可。