2013-09-05 1 views
1

를 반환하지 않습니다 나는이 내가SQL 트랜잭션에서 저장 프로 시저가 올바른 결과

USE [tableName] 
GO 

SELECT [ID] 
     ,[Name] 

    FROM [dbo].[News] 
    where News.[Name] like '%'+ 'te' +'%' 
GO 

결과 리턴 2 행 "와 같은"수동으로 테이블에서 선택하려 하나의 StoredProcedure

Create PROCEDURE [dbo].[NewsSelect] 
    @Name nchar(40)=null, 
    @PublishDate date=null, 
    @SearchStringName nchar(100)=null, 
    @Sort char(1)='1', 
    @Order bit=1, 
    @startRowIndex int = 1, 
    @pageSize int = 25, 
    @TotalRecords int Output 

AS 
begin 
set rowcount @pageSize; 

With newsSelect(ID, Name, PublishDate, [Status],RowNumber) as(
    select 
     ID, 
     Name, 
     PublishDate, 
     [Status], 
     RowNumber 
    from 
     (select 
ROW_NUMBER() over(order by 
    case when @Sort = '1' and @Order=1 then News.Name end asc, 
    case when @Sort = '1' and @Order=0 then News.Name end desc, 
    case when @Sort = '2' and @Order=1 then News.PublishDate end asc, 
    case when @Sort = '2' and @Order=0 then News.PublishDate end desc, 
    case when @Sort = '3' and @Order=1 then News.[Status] end asc, 
    case when @Sort = '3' and @Order=0 then News.[Status] end desc)as RowNumber,      
       News.ID, 
         News.Name as Name, 
         News.PublishDate, 
         News.[Status] 

         from [News] 
where (@SearchStringName is null or(@SearchStringName is not null and (Name like '%'[email protected]+'%'))) 
     group by News.ID, News.Name, News.PublishDate,News.[Status]) as temp) 
select * from newsSelect where newsSelect.rowNumber> @startRowIndex; 

With newsSelect1(ID, Name, PublishDate, [Status],RowNumber) as( select 
     ID, 
     Name, 
     PublishDate, 
     [Status], 
     RowNumber 
    from 
     (select 
     ROW_NUMBER() over(order by 
      case when @Sort = '1' and @Order=1 then News.Name end asc, 
      case when @Sort = '1' and @Order=0 then News.Name end desc, 
      case when @Sort = '2' and @Order=1 then News.PublishDate end asc, 
      case when @Sort = '2' and @Order=0 then News.PublishDate end desc, 
      case when @Sort = '3' and @Order=1 then News.[Status] end asc, 
      case when @Sort = '3' and @Order=0 then News.[Status] end desc)as RowNumber,      
       News.ID, 
         News.Name as Name, 
         News.PublishDate, 
         News.[Status] 

    from News 
    where (@SearchStringName is null or(@SearchStringName is not null and (Name like '%'[email protected]+'%'))) 
    group by News.ID, News.Name, News.PublishDate,News.[Status]) as temp)   

      select @TotalRecords = Count(*) from newsSelect1 



END 

21 Test 1 
22 Test 3 

하지만 저장 프로 시저를 테스트 할 때

,
USE [tableName] 
GO 

DECLARE @return_value int, 
     @TotalRecords int 

EXEC @return_value = [dbo].[NewsSelect] 
     @Name = NULL, 
     @PublishDate = NULL, 
     @SearchStringName = N'te', 
     @Sort = NULL, 
     @Order = NULL, 
     @startRowIndex = 0, 
     @pageSize = 25, 
     @TotalRecords = @TotalRecords OUTPUT 

SELECT @TotalRecords as N'@TotalRecords' 

SELECT 'Return Value' = @return_value 

GO 

이 문제가 어디 0 입니다 반환? 2 행을 반환하지 않는 이유는 무엇입니까?

+1

이 저장 프로 시저'SELECT'의 이름을 지정하지 마십시오 작동 NVARCHAR에 NCHAR 에서 유형을 변경할 때

SELECT 'Return Value' = @TotalRecords 

+0

을 혼동하고있어'실행하려고? – SWeko

답변

0

나는 문제

@SearchStringName nchar(100)=null 

을 발견 .. . 또한 저장 프로 시저 SELECT``입니다하지만 당신은 NewsSelect` 그래서 난 조금 독립형으로 실제 CTE를 실행하면 어떻게됩니까

+3

예,'에서 NCHAR (100)'은 100 자 항상 있다는 것을 의미도, 그래서'like' 98 공백이'te' 패딩을 찾고 있었다 :) – SWeko

0

당신은 아마 당신이 의미 @TotalRecords

SELECT @TotalRecords as N'@TotalRecords' 

을 설정하지만,

SELECT 'Return Value' = @return_value 

@return_value 사용할 수 있습니까? 나는 그것을 확인 :

+0

나는 변경되었지만 0 – Alex

관련 문제