Sql server 带输出参数的存储过程

Sql server 带输出参数的存储过程,sql-server,tsql,stored-procedures,Sql Server,Tsql,Stored Procedures,尝试创建一个存储过程,该过程将给出所需的记录数以及该表中的记录总数 “@Query”部分在我单独执行时给出结果。所以这没问题。 谁能检查一下语法是否正确,因为我没有得到任何结果 ALTER PROCEDURE GetRecordsByPage ( @TableName nvarchar(50), @ColumnName nvarchar(50), @OrderByClause nvarchar(50), @StartIndex nvarch

尝试创建一个存储过程,该过程将给出所需的记录数以及该表中的记录总数

“@Query”部分在我单独执行时给出结果。所以这没问题。 谁能检查一下语法是否正确,因为我没有得到任何结果

ALTER PROCEDURE GetRecordsByPage    
(    
  @TableName nvarchar(50),    
  @ColumnName nvarchar(50),    
  @OrderByClause nvarchar(50),    
  @StartIndex nvarchar(50),    
  @EndIndex nvarchar(50),    
  @TotalRows nvarchar(50) output    
)    
AS    
BEGIN    
  DECLARE @Query nvarchar(max)    

  select @Query = 'select '+@TotalRows+' = count(*) from '+@TableName+' 
                   where deleted=0

                   with temp as (select row_number() over (order by '+    
                   @colname+' '+@OrderByClause+') as row, * from '+@tablename+')

                   select * from temp where row between '+@startIndex+' and '
                   +@EndIndex    

   execute sp_executesql @Query, @TotalRows output 

END
--is this correct, to test this stored procedure
-- execute GetRecordsByPage 'tblBranch','BranchName', '2', '10'
否则,查询将是:

select count(*) from tblBranch;
With temp as
(select row_number over(order by name desc) as row, * from tblbranch)
select * from temp where row between 11 and 20;

您将int赋值给@TotalRows,该@TotalRows类型为nvarchari。如果赋值给
NVARCHAR
变量,则应使用
N'.'
指示Unicode。下一步:您必须在带有关键字的
前面加上分号(
)。编写类似select@query='select count(*)的查询。那么我应该如何将它存储在变量中。@Ruby检查我的回答您已经在paramDefinition中将它声明为int。第一个声明是nvarchar。所以我也应该把它改为int。为什么在exec语句中@query后面有一个额外的逗号/param。我假设测试过程的最终execute语句是正确的…itexecute GetRecordsByPage'tblBranch','BranchName','2','10',/@TotalRows output-给出一个错误-必须声明标量变量/@TotalRows-但它不是已经声明了吗?您是否将/@TotalRows使用GetRecordsByPage'tblBranch','BranchName','2','10',@TotalRowsWhen仅使用“@”…它不允许提交。它认为这是一个用户名。这行代码和你写的一样,但是末尾有“output”你怎么称呼它是c#。。我只是问问
ALTER PROCEDURE GetRecordsByPage    
(    
  @TableName nvarchar(50),    
  @ColumnName nvarchar(50),    
  @OrderByClause nvarchar(50),    
  @StartIndex nvarchar(50),    
  @EndIndex nvarchar(50),    
  @TotalRows nvarchar(50) output    
)    
AS    
BEGIN    
  DECLARE @Query nvarchar(max)    

  select @Query = 'select @TotalRowsOut = count(*) from '+@TableName+' 
                   where deleted=0

                   with temp as (select row_number() over (order by '+    
                   @colname+' '+@OrderByClause+') as row, * from '+@tablename+')

                   select * from temp where row between '+@startIndex+' and '
                   +@EndIndex    

    DECLARE @ParmDefinition nvarchar(500);
SET @ParmDefinition = N'@TotalRowsOut int OUTPUT';
       execute sp_executesql @Query,  @ParmDefinition,@TotalRowsOut=@TotalRows output 
select @TotalRows
END