2016-08-12 3 views
0

Ich habe ein anderes Feld in meiner Datenbanktabelle mit dem Namen FileName. Ich möchte, dass der Datensatz von FileName ausgewählt wird. Was soll ich dem Code hinzufügen?SQL Stored Procedure Select-Anweisung

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

Warum verwenden Sie dynamische SQL? –

+0

Ein anderes Feld in welcher Tabelle? Sie müssen dies näher ausführen. – scsimon

+0

Die gleiche Tabelle "tblFiles" – user2970635

Antwort

0

Sie haben mir nicht viel gegeben, um weiterzugehen. Aber ist das was du brauchst?

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

Ich versuchte den oben genannten Code, aber der Fehler, den ich bekam, muss die Skalarvariable "f_name" deklarieren – user2970635

+0

Ich aktualisierte meine Antwort. Ich denke, das Problem, das Sie haben, ist, wie Sie Parameter in dynamischem SQL verwenden. Wenn meine Antwort nicht funktioniert, sieh dir diesen Link an, es sollte helfen. http://www.aspsnippets.com/Articles/How-to-use-and-pass-parameters-to-dynamic-SQL-in-SQL-Server.aspx. –