Sql server 2005 如果两者都存在,则返回下一条记录和上一条记录。感谢您的帮助。您可以使用MAX(ISNULL(p.galleryID),“”)获得相同的结果。存储过程中的查询有问题。如果为空,则不能在SQL中分配“”。这是不允许的。即使我尝试执行MAX(ISNULL(p.g

Sql server 2005 如果两者都存在,则返回下一条记录和上一条记录。感谢您的帮助。您可以使用MAX(ISNULL(p.galleryID),“”)获得相同的结果。存储过程中的查询有问题。如果为空,则不能在SQL中分配“”。这是不允许的。即使我尝试执行MAX(ISNULL(p.g,sql-server-2005,asp-classic,Sql Server 2005,Asp Classic,如果两者都存在,则返回下一条记录和上一条记录。感谢您的帮助。您可以使用MAX(ISNULL(p.galleryID),“”)获得相同的结果。存储过程中的查询有问题。如果为空,则不能在SQL中分配“”。这是不允许的。即使我尝试执行MAX(ISNULL(p.galleryID),“norec”)或MAX(ISNULL(p.galleryID),0)。实际上,它是一个使用VBScript的经典ASP应用程序。谢谢@爱国者:好吧,至少存储过程部分会对您有所帮助。再次感谢您为存储过程提供方法。现在我一直在


如果两者都存在,则返回下一条记录和上一条记录。感谢您的帮助。您可以使用
MAX(ISNULL(p.galleryID),“”)获得相同的结果。存储过程中的查询有问题。如果为空,则不能在SQL中分配“”。这是不允许的。即使我尝试执行MAX(ISNULL(p.galleryID),“norec”)或MAX(ISNULL(p.galleryID),0)。实际上,它是一个使用VBScript的经典ASP应用程序。谢谢@爱国者:好吧,至少存储过程部分会对您有所帮助。再次感谢您为存储过程提供方法。现在我一直在用它。实际上,这是一个使用VBScript的经典ASP应用程序。谢谢@爱国者:好吧,至少存储过程部分会对您有所帮助。再次感谢您为存储过程提供方法。现在我一直在用它。它只是更快。我可以理解最新记录上的下一个值为null,因为没有下一个记录,但前一个值也在第一个记录上返回为null。您希望为第一行之前的行返回什么值?第一排前面是哪一排?单词问题和猜测都不好玩;请显示示例数据和所需结果。我可以理解最新记录上的下一个值为null,因为没有下一个记录,但前一个值也在第一个记录上返回为null。您希望为第一行之前的行返回什么值?第一排前面是哪一排?单词问题和猜测都不好玩;请显示样本数据和所需结果。
SQL = "SELECT TOP 1 max(p.galleryID) as previousrec, min(n.galleryID) AS nextrec FROM gallery AS p CROSS JOIN gallery AS n where p.galleryid < '"&intID&"' and n.galleryid > '"&intID&"'"
Set rsRec = Server.CreateObject("ADODB.Recordset")
rsRec.Open sql, Conn
strNext = rsRec("nextrec")
strPrevious = rsRec("previousrec")
rsRec.close
set rsRec = nothing
SELECT TOP 1 max(p.galleryID) as previousrec, min(n.galleryID) AS nextrec 
       FROM gallery AS p 
       CROSS JOIN gallery AS n 
              where (p.galleryid < @intID or p.galleryid is null)
              and (n.galleryid > @intID  or n.galleryid is null)
CREATE PROCEDURE spGetNextAndPreviousRecords 
    -- Add the parameters for the stored procedure here
    @intID int 
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    SELECT TOP 1 max(p.galleryID) as previousrec, min(n.galleryID) AS nextrec 
       FROM gallery AS p 
       CROSS JOIN gallery AS n 
              where (p.galleryid < @intID or p.galleryid is null)
              and (n.galleryid > @intID  or n.galleryid is null)

END
 Using c As New SqlConnection(ConfigurationManager.ConnectionStrings("ConnectionString").ConnectionString)
       c.Open()
       Dim command = New SqlCommand("spGetNextAndPreviousRecords")

       command.Parameters.AddWithValue("@intID", yourID)
       Dim reader as SqlDataReader = command.ExecuteReader()
       While(reader.Read())
          ' read the result here
       End While
End Using
CREATE PROCEDURE dbo.GetGalleryBookends
    @GalleryID INT
AS
BEGIN
    SET NOCOUNT ON;

    ;WITH n AS 
    (
        SELECT galleryID, rn = ROW_NUMBER() 
          OVER (ORDER BY galleryID) 
          FROM dbo.gallery
    )
    SELECT
      previousrec = MAX(nA.galleryID), 
      nextrec     = MIN(nB.galleryID)
    FROM n 
    LEFT OUTER JOIN n AS nA
    ON nA.rn = n.rn - 1
    LEFT OUTER JOIN n AS nB
    ON nB.rn = n.rn + 1
    WHERE n.galleryID = @galleryID;
END
GO
      previousrec = COALESCE(CONVERT(VARCHAR(12), MIN(nA.galleryID)), ''), 
      nextrec     = COALESCE(CONVERT(VARCHAR(12), MAX(nB.galleryID)), '')