2017-01-25 16 views
-2
ALTER PROCEDURE [dbo].[GetCustomers_PagerSelected] 
    @PageIndex INT, 
    @PageSize INT = 10, 
    @SubCondition nvarchar(max), 
    @RecordCount INT OUTPUT 
AS 
BEGIN 
    SET NOCOUNT ON; 

    SELECT 
     ROW_NUMBER() OVER (ORDER BY [Plan_Id] ASC) AS RowNumber, 
     [Plan_Id], [User_Id], [Plan_Name], 
     [ImageCount], [PlanPrice], 
     '../User/HomePlanImage/' + CONVERT(varchar(5), User_Id) +'/' + CONVERT(varchar(5), Plan_Id) + '/' + CONVERT(varchar(5),1) +'.jpg' AS PlanImagePath 
    INTO 
     #Results 
    FROM 
     [mf_BuildingPlanDetails] 
    WHERE 
     IsActive = 1 @SubCondition 

    SELECT 
     @RecordCount = COUNT(*) 
    FROM 
     #Results 

    SELECT * 
    FROM #Results 
    WHERE 
     RowNumber BETWEEN(@PageIndex -1) * @PageSize + 1 AND(((@PageIndex -1) * @PageSize + 1) + @PageSize) - 1 

    DROP TABLE #Results 
+3

このようなことを実行する唯一の方法は、動的SQLを使用することです。あなたが何らかの背景を提供して目標をより良く説明できるなら、おそらく誰かがあなたの目標を達成するためのよりよい方法を示すことができます。 –

+0

上記のコード –

+1

のwhere句に@SubConditionパラメータを渡したいと思います。これはコードを読むことから明らかです。しかし、私が書いたように、これは動的SQLを使用している場合にのみ実行でき、問題の世界への扉を開きます。これは、@ SubConditionで許可したい値のような、より多くの背景を含めるように質問を編集することを提案する理由です。 –

答えて

0

このような何かはおそらく、あなたが欲しいものを行う必要があります。

ALTER PROCEDURE [dbo].[GetCustomers_PagerSelected] 
    @PageIndex INT, 
    @PageSize INT = 10, 
    @SubCondition nvarchar(max), 
    @RecordCount INT OUTPUT 
AS 
BEGIN 
    SET NOCOUNT ON; 

    DECLARE @Sql varchar(max) 

    CREATE TABLE #Results 
    (
     RowNumber int, 
     Plan_Id int, -- Guessing the column data type, change if needed 
     User_Id int, -- Guessing the column data type, change if needed 
     Plan_Name varchar(200), -- Guessing the column data type and lengthe, change if needed 
     ImageCount int, -- Guessing the column data type, change if needed 
     PlanPrice money, -- Guessing the column data type, change if needed 
     PlanImagePath varchar(300), -- Guessing the column data type and lengthe, change if needed 
    ) 

    SET @Sql = ' 
    SELECT 
     ROW_NUMBER() OVER (ORDER BY [Plan_Id] ASC) AS RowNumber, 
     [Plan_Id], 
     [User_Id], 
     [Plan_Name], 
     [ImageCount], 
     [PlanPrice], 
     ''../User/HomePlanImage/'' + CONVERT(varchar(5), User_Id) + 
           ''/'' + CONVERT(varchar(5), Plan_Id) + 
           ''/'' + CONVERT(varchar(5),1) + 
           ''.jpg'' AS PlanImagePath 

    FROM 
     [mf_BuildingPlanDetails] 
    WHERE 
     IsActive = 1 ' + @SubCondition 

    INSERT INTO #Results 
    EXEC sp_executeSql @Sql 

    SELECT 
     @RecordCount = COUNT(*) 
    FROM 
     #Results 

    SELECT * 
    FROM #Results 
    WHERE 
     RowNumber BETWEEN(@PageIndex -1) * @PageSize + 1 AND(((@PageIndex -1) * @PageSize + 1) + @PageSize) - 1 

    DROP TABLE #Results 
END 

しかし、クエリを使用すると、これがあるように注意してくださいセキュリティの危険SQL injectionの攻撃に対して脆弱です。 私は強く別の方法をお勧めしますが、十分な情報がないため、アドバイスできません。

+0

動作しなくなるまで –

+0

"うまくいかない" - どう?間違いはありますか?期待どおりの結果が得られますか? –

+0

訂正をした後に感謝@Zohar_Peled –

関連する問題