【问题标题】:Must declare the scalar variable "@IDAlbum"必须声明标量变量“@IDAlbum”
【发布时间】:2015-10-11 18:22:15
【问题描述】:

我正在尝试使用 ASP.net 2010 和 SQL Server 创建一个简单的网站。 在调用过程 Pager 后,我被错误“必须声明标量变量“@IDAlbum”阻止(参见下面的代码)。 有人可以帮我解决这个 pbm 问题吗?

 USE [Portfolio]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[Pager]
    (@PageNo int = 1,
    @ItemsPerPage int = 2,
    @IDAlbum int,
    @TotalRows int out)
AS
BEGIN
  SET NOCOUNT ON
  DECLARE
    @StartIdx int,
    @SQL nvarchar(max),  
    @SQL_Conditions nvarchar(max),
    @EndIdx int

    IF @PageNo < 1 SET @PageNo = 1
    IF @ItemsPerPage < 1 SET @ItemsPerPage = 10

    SET @StartIdx = (@PageNo -1) * @ItemsPerPage + 1
    SET @EndIdx = (@StartIdx + @ItemsPerPage) - 1
    SET @SQL = 'SELECT picture
                FROM (
                SELECT  ROW_NUMBER() OVER(ORDER BY IDAlbum) AS Row, *  
                      FROM  Album_Pic WHERE IDAlbum =  @IDAlbum )
                      AS tbl WHERE  
                      Row >= ' + CONVERT(varchar(9), @StartIdx) + 
                      ' AND Row <=  ' + CONVERT(varchar(9), @EndIdx) 



    EXEC sp_executesql @SQL

    SET @SQL = 'SELECT @TotalRows=COUNT(*) FROM Album_Pic WHERE IDAlbum = ' + CONVERT(varchar(9), @IDAlbum) 
    EXEC sp_executesql 
        @query = @SQL, 
        @params = N'@TotalRows INT OUTPUT', 
        @TotalRows = @TotalRows OUTPUT 
END

【问题讨论】:

标签: c# sql asp.net sql-server


【解决方案1】:

@idAlbum 超出了动态查询的范围。

 USE [Portfolio]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[Pager]
    (@PageNo int = 1,
    @ItemsPerPage int = 2,
    @IDAlbum int,
    @TotalRows int out)
AS
BEGIN
  SET NOCOUNT ON
  DECLARE
    @StartIdx int,
    @SQL nvarchar(max),  
    @SQL_Conditions nvarchar(max),
    @EndIdx int

    IF @PageNo < 1 SET @PageNo = 1
    IF @ItemsPerPage < 1 SET @ItemsPerPage = 10

    SET @StartIdx = (@PageNo -1) * @ItemsPerPage + 1
    SET @EndIdx = (@StartIdx + @ItemsPerPage) - 1
    SET @SQL = 'SELECT picture
                FROM (
                SELECT  ROW_NUMBER() OVER(ORDER BY IDAlbum) AS Row, *  
                      FROM  Album_Pic WHERE IDAlbum =  ' +convert(varchar(10),@IDAlbum)+' )
                      AS tbl WHERE  
                      Row >= ' + CONVERT(varchar(9), @StartIdx) + 
                      ' AND Row <=  ' + CONVERT(varchar(9), @EndIdx) 



    EXEC sp_executesql @SQL

    SET @SQL = 'SELECT @TotalRows=COUNT(*) FROM Album_Pic WHERE IDAlbum = ' + CONVERT(varchar(9), @IDAlbum) 
    EXEC sp_executesql 
        @query = @SQL, 
        @params = N'@TotalRows INT OUTPUT', 
        @TotalRows = @TotalRows OUTPUT 
END

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-03
  • 1970-01-01
  • 2013-07-03
  • 1970-01-01
相关资源
最近更新 更多