2013-10-05 2 views
3

Я пытаюсь создать хранимую процедуру в SQL Server 2008. У меня есть опыт программирования, но я не могу понять этого ... Возможно, я просто слишком долго смотрел на него! Первый пример вызывает ошибку, но второй не ... Любые идеи ...Сохраненная процедура SQL raiserror не работает

ALTER PROC master_class 
--EXTERNAL VARIABLES 
    @iSFname varchar(20), 
    @iSLname varchar(20), 
    @iDOB date 
AS 
--INTERNAL VARIABLES 
DECLARE @AGE int 
DECLARE @ReturnValue int 
DECLARE @class nvarchar 

--get student age 
SELECT @AGE = 32   
SELECT @class = 'science' 

    --ERROR CHECKS  
    --check ward age rule 
    IF (@AGE > 18) 
     BEGIN   
      RAISERROR('This Person cannot be submitted to this class!', 16, 1) 
      RETURN 99 
     END 

Затем выполнить

EXECUTE [School].[dbo].[master_class] 'john', 'o connor', '08-01-1981' 

выше будет возвращать «Это лицо не может быть представлен в этот класс! ». Если я изменить, если условие

IF (@AGE > 18 AND @class = 'science') 
     BEGIN   
      RAISERROR('This Person cannot be submitted to this class!', 16, 1) 
      RETURN 99 
     END 

Это будет выполняться, когда он не должен !!!! ... Почему это, когда @class = «наука» истинно и возраст составляет более 18 истинно

Любая обратная связь будет здорово

ответ

4

nvarchar без длины по умолчанию для nvarchar(1) (как ни странно, varchar значения по умолчанию 30, и оба по умолчанию 30 в cast)

Declare class nvarchar = 'science' 

Select @class 

's' 
+0

Cheers Laurence ... Работает! :) –

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