3

我正在尝试在 SQL Server 2008 中创建一个存储过程。我有编程经验,但我无法弄清楚……也许我只是看得太久了!第一个例子引发了错误,但第二个没有......任何想法......

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 条件更改为

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

它会在不应该执行的时候执行!!!!...为什么会这样,当 @class = 'science' 为真且年龄超过 18 岁时为真

任何反馈都会很棒

4

1 回答 1

4

nvarchar没有长度默认为nvarchar(1)(奇怪的是,varchar默认为 30,并且在 a 中都默认为 30 cast

Declare class nvarchar = 'science'

Select @class

's'
于 2013-10-05T19:33:42.217 回答