2016-06-07 58 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 
相关问题