SQL:@somevalue = null无法正常工作

时间:2012-10-17 10:16:45

标签: sql stored-procedures if-statement null

我试过@somevalue = null并且它在那个时候工作了。但现在它不起作用。如何检查值是否为空? 简而言之,我需要做的是,如果@existPerson等于null,则将值插入数据库。但如果它存在则返回-2。我已经检查了数据库,确保没有与@nic = 100相同的值。即便如此,它返回我-2。可能的原因是什么?非常感谢!

CREATE PROCEDURE [dbo].[addStudent] 
    @stuName varchar(50), 
    @address varchar(100),
    @tel varchar(15),
    @etel varchar(15),
    @nic varchar (10),
    @dob date


AS 
BEGIN   
    SET NOCOUNT ON;

    DECLARE @currentID INT
    DECLARE @existPerson INT
    SET @existPerson = (SELECT p_ID FROM Student WHERE s_NIC = @nic);
    IF @existPerson = null
        BEGIN
            INSERT INTO Person (p_Name, p_RegDate, p_Address, p_Tel, p_EmergeNo, p_Valid, p_Userlevel)
            VALUES (@stuName,  GETDATE(), @address, @tel, @etel, 0, 'Student' );
            SET @currentID = (SELECT MAX( p_ID) FROM Person); 
            INSERT INTO Student (p_ID, s_Barcode, s_DOB, s_NIC) VALUES (@currentID , NULL, @dob, @nic);
            return 0;
        END
    ELSE
        return -2;
END 

5 个答案:

答案 0 :(得分:5)

这应该是

  IF @existPerson is null
在SQL中

如果要检查值是否为空,则需要使用is nullis not null代替= null<> null

答案 1 :(得分:3)

您无法将null的内容与=符号进行比较。它始终是unknown。您必须使用IS运算符:

IF @existPerson IS null

答案 2 :(得分:0)

对于Ex: -

SELECT p_ID FROM Student WHERE s_NIC IS NULL

答案 3 :(得分:0)

其他方式,ISNULL ( check_expression , replacement_value )

答案 4 :(得分:0)

 if @existsperson is null
   insert(...)
 else
     return -2;