2013-05-30 3 views
0

Что плохого в этой процедуреОшибка SQL: Неправильная ошибка синтаксиса

CREATE PROCEDURE [dbo].[Question_ReadBySort] 
-- Add the parameters for the stored procedure here 
(
    @PageNumber int, 
    @Gid bigint, 
    @Sorttype int, 
    @Df int 
) 
AS 
BEGIN 
    if @Gid=0 
     BEGIN 
     With Cust AS 
      (SELECT * , 
      ROW_NUMBER() OVER (order by q_id DESC) as RowNumber 
      from tbl_Question 
      where q_del=0) 
     END 
    ELSE 
     BEGIN 
     With Cust AS 
      (SELECT * , 
      ROW_NUMBER() OVER (order by q_id DESC) as RowNumber 
      from tbl_Question 
      where q_del=1) 
     END 
END 
GO 

и эта ошибка происходит в SQL Server:

Msg 156, Level 15, State 1, Procedure Question_ReadBySort, Line 23
Incorrect syntax near the keyword 'END'.

Msg 156, Level 15, State 1, Procedure Question_ReadBySort, Line 31
Incorrect syntax near the keyword 'END'.

+0

Вы последовательно сокращали каждую часть запроса, чтобы устранить виновников и нуль в реальной проблеме, или просто здесь, прося нас выяснить это с нуля? –

ответ

6

Определение ОТВ должно быть немедленно с последующим утверждением с использованием CTE , Например, что-то вроде

WITH Cust 
    AS (SELECT *, 
       ROW_NUMBER() OVER (ORDER BY q_id DESC) AS RowNumber 
     FROM tbl_Question 
     WHERE q_del = CASE 
          WHEN @Gid = 0 THEN 0 
          ELSE 1 
         END) 
SELECT * 
FROM Cust 

Вы не можете определить различные определения КТР условно с IF затем использовать их в дальнейшем, как вы, кажется, пытается.

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