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)), '')