我有一个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()
答案 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个实例,它们不会互相交叉
效率提示:您无需在每次循环迭代时重新定义参数,您可以在循环上方和循环内部定义参数,只需更新其值即可。