我正在尝试在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'为真且Age超过18时为真
任何反馈都会很棒
答案 0 :(得分:4)
nvarchar
没有长度默认为nvarchar(1)
(奇怪的是,varchar
默认为30,默认为cast
中的30
Declare class nvarchar = 'science'
Select @class
's'