2016-08-12 111 views
0

我在我的数据库表中有另一个名为FileName的字段,我希望通过FileName选择记录。我应该添加什么代码。SQL存储过程选择语句

ALTER PROCEDURE [dbo].[spx_Pager] 
@PageNo int = 1, 
@ItemsPerPage int = 2, 
@TotalRows int out, 
@f_name nvarchar(50) 

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 @f_name = (@f_name) 
SET @SQL = 'SELECT FilePath 
      FROM (
      SELECT ROW_NUMBER() OVER(ORDER BY ID) AS Row, * 
        FROM tblFiles) AS tbl WHERE Row >= ' 
        + CONVERT(varchar(9), @StartIdx) + ' AND 
        Row <= ' + CONVERT(varchar(9), @EndIdx) 
EXEC sp_executesql @SQL 

SET @SQL = 'SELECT @TotalRows=COUNT(*) FROM tblFiles' 
EXEC sp_executesql 
    @query = @SQL, 
    @params = N'@TotalRows INT OUTPUT', 
    @TotalRows = @TotalRows OUTPUT 
END 
+1

你为什么要用动态sql? –

+0

在哪个表中的另一个字段?你需要详细说明这一点。 – scsimon

+0

同一张表“tblFiles” – user2970635

回答

0

你没有给我太多的继续。但这是你需要的吗?

ALTER PROCEDURE [dbo].[spx_Pager] 
@PageNo int = 1, 
@ItemsPerPage int = 2, 
@TotalRows int out, 
@f_name nvarchar(50) 

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 @f_name = (@f_name) 
SET @SQL = 'SELECT FilePath 
     FROM (
     SELECT ROW_NUMBER() OVER(ORDER BY ID) AS Row, * 
       FROM tblFiles) AS tbl WHERE Row >= ' 
       + CONVERT(varchar(9), @StartIdx) + ' AND 
       Row <= ' + CONVERT(varchar(9), @EndIdx) + ' AND 
       FileName = @file_name' 
EXEC sp_executesql @SQL 

SET @SQL = 'SELECT @TotalRows=COUNT(*) FROM tblFiles' 
EXEC sp_executesql 
    @query = @SQL, 
    @params = N'@TotalRows INT OUTPUT', 
    @TotalRows = @TotalRows OUTPUT, 
    @file_name = @f_name 
END 
+0

我试过上面的代码,但我得到的错误是必须声明标量变量“f_name” – user2970635

+0

我更新了我的答案。我认为你遇到的问题是如何在动态SQL中使用参数。如果我的回答不起作用,请检查此链接,它应该有所帮助。 http://www.aspsnippets.com/Articles/How-to-use-and-pass-parameters-to-dynamic-SQL-in-SQL-Server.aspx。 –