2016-06-07 42 views
-1

我想返回總量和頁數。如何使用sp_executesql從SQL Server返回兩個OUT參數

我要回頁頁次int和總金額爲十進制

@SQL = 'select cast (row_number() over(ORDER BY |SortedColumn| |SortedOrder|) as int)NO , * into #table From (Select SPM.Id as Id,SPM.SalePrice As PlanAmount,SPM.CreatedDate as CreatedDate,SPM.ExpertId as ExpertUserProfileId,P.Id as PatientId,ISNULL((P.FirstName +'' '' + P.LastName),'''') as PatientName 
       from SubscribedPlanByMember SPM 
       JOIN Patient P ON 
       P.UserProfileId=SPM.MemberId 
       ) SP Where 1=1 ' 
     + @Where + 
     ' select @x = CEILING(CAST((CAST(@@rowcount AS FLOAT)/ CAST('+ltrim(@PageSize)+' AS FLOAT)) AS FLOAT)) 
     select * from #table as t where NO between '+ltrim(@[email protected]+1)+' and '+ltrim(@PageIndex)+' ' 

    SET @TotalAmount= CAST((select Sum(SalePrice) as Amount from SubscriptionPlanOfExperts where [email protected]) as decimal) 

      SET @SQL= REPLACE(@SQL, '|SortedColumn|', @sortedColumn); 
      SET @SQL= REPLACE(@SQL, '|SortedOrder|', @sortedOrder); 
print(@SQL) 

exec sp_executesql @SQL, N'@x int out', @PageCount out 
+1

請在所有相關代碼的例。你的變量在哪裏定義和設置? –

+0

也許做一個INSERT INTO #TempTable EXEC(@SQL),並將輸出值作爲SELECT從動態塊中返回。然後在#TempTable –

+0

中使用2x值執行任何操作您可以從sp_executesql返回多個輸出參數。請參閱MSDN https://msdn.microsoft.com/en-us/library/ms188001.aspx – Alex

回答

0

這是完全可以接受的中sp_executesql調用多個輸出參數。請參閱以下MS支持文章:https://support.microsoft.com/en-gb/kb/262499

這提供了多種輸出參數下面的例子:

DECLARE @SQLString NVARCHAR(500) 
DECLARE @ParmDefinition NVARCHAR(500) 
DECLARE @parmIN VARCHAR(10) 
DECLARE @parmRET1 VARCHAR(30) 
DECLARE @parmRET2 VARCHAR(30) 
SET @parmIN=' returned' 
SET @SQLString=N'EXEC Myproc @parm, 
          @parm1OUT OUTPUT, @parm2OUT OUTPUT' 
SET @ParmDefinition=N'@parm varchar(10), 
         @parm1OUT varchar(30) OUTPUT, 
         @parm2OUT varchar(30) OUTPUT' 

EXECUTE sp_executesql 
    @SQLString, 
    @ParmDefinition, 
    @[email protected], 
    @[email protected] OUTPUT,@[email protected] OUTPUT 

SELECT @parmRET1 AS "parameter 1", @parmRET2 AS "parameter 2" 

在你的情況,你只需要修改你的sp_executesql調用是這樣的:

exec sp_executesql @SQL, N'@x int output, @TotalAmount decimal output', @[email protected] int output, @[email protected] decimal output