2013-11-30 3 views
0

Пытается создать Хранимую процедуру, которая даст нужный номер. записей, а также общее количество. записей в этой таблице.Сохраненная процедура с параметром вывода

Часть '@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 '[email protected]+' = count(*) from '[email protected]+' 
        where deleted=0 

        with temp as (select row_number() over (order by '+  
        @colname+' '[email protected]+') as row, * from '[email protected]+') 

        select * from temp where row between '[email protected]+' and ' 
        [email protected]  

    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; 
+0

вы назначаете Int к @TotalRows который имеет тип NVARCHAR –

+0

Если присваивание переменной 'NVARCHAR', вы должны использовать' N '...' ', чтобы указать Unicode. Далее: вы ** должны ** поставить точку с запятой (';') перед ключевым словом 'with'. –

+0

написать запрос, например select @Query = 'select count (*) .... –

ответ

1
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 '[email protected]+' 
        where deleted=0 

        with temp as (select row_number() over (order by '+  
        @colname+' '[email protected]+') as row, * from '[email protected]+') 

        select * from temp where row between '[email protected]+' and ' 
        [email protected]  

    DECLARE @ParmDefinition nvarchar(500); 
SET @ParmDefinition = N'@TotalRowsOut int OUTPUT'; 
     execute sp_executesql @Query, @ParmDefinition,@[email protected] output 
select @TotalRows 
END 
+0

Вы объявили его int в paramDefinition. Первая декларация была nvarchar. Так что я тоже изменил это на int. Почему добавлена ​​дополнительная запятая/параметр после @query в инструкции exec. Я предполагаю, что окончательная инструкция выполнения для проверки процедуры правильная ... это – Ruby

+0

, эта запятая была ошибкой, позвольте мне изменить. это nvarchar –

+0

выполнить GetRecordsByPage 'tblBranch', 'BranchName', '2', '10',/@ TotalRows output - дает ошибку - должен объявлять скалярную переменную/@ TotalRows - Но разве он уже не объявлен – Ruby

Смежные вопросы