如果某些值为空,如何插入值

时间:2013-10-30 08:13:39

标签: sql sql-server

FirstName     LastName     University
   Bob         Brown        Aviation
   Kate        Dylan        Economic
   Tommy       Loren        Aviation

大学有默认值:航空。 有存储过程将值插入表中, 在过程调用中有3个参数:

@declare firstname varchar(50),
@declate lastname varchar(50),
@declare university varchar(50)

insert into myTbl (FirstName,LastName,University) values(@firstname,@lastname,@university)

我想如果在程序中@university是空的,不要插入到表中,例如,如果我执行: EXEC myProcedure 'Joseph','Divan',''它必须只插入表格名字和姓氏大学将是航空,因为它是默认值

7 个答案:

答案 0 :(得分:2)

如果您的默认名称“大学”列始终为航空,我建议采用此方法。

为“University”列设置默认值约束,如果值为null,则会自动插入默认值。

ALTER TABLE myTbl ADD CONSTRAINT DF_UName DEFAULT N'Aviation' FOR University

然后使用此代码

declare @firstname varchar(50),
declate @lastname varchar(50),
declare @university varchar(50)

IF (@university = '' OR (@university IS NULL) )
BEGIN
        INSERT INTO myTbl (FirstName,LastName) 
        VALUES (@firstname,@lastname);
END
ELSE
BEGIN
       INSERT INTO myTbl (FirstName,LastName,University) 
       VALUES (@firstname,@lastname,@university);
END

希望这有帮助

答案 1 :(得分:1)

MS SQL允许您为存储过程中的参数设置默认值:

CREATE PROCEDURE MyProc 
    @firstName varchar(50), 
    @lastName varchar (50), 
    @university varchar(50) = 'Aviation'
AS
INSERT INTO myTbl (FirstName,LastName,University) 
    VALUES (@firstname,@lastname,@university);

您可以通过两种方式使用它:

EXEC MyProc 'Bob', 'Brown'
EXEC MyProc 'Kate', 'Dylan', 'Economic'

答案 2 :(得分:1)

我认为更改表格架构以获得更好的性能会更好。

您可以更改表格架构,如下所示,以合并默认值。

ALTER TABLE myTbl
ALTER COLUMN Univesity SET DEFAULT 'Aviation'

P.S。如果您只需要使用存储过程,那么您可以参考上面的答案。

答案 3 :(得分:0)

试试这个

@declare firstname varchar(50),
@declate lastname varchar(50),
@declare university varchar(50)

IF (@university is not null)
BEGIN
    insert into myTbl (FirstName,LastName,University) values(@firstname,@lastname,@university)
END

答案 4 :(得分:0)

在插入语句之前插入以下内容:

如果@university为空集@university = null

答案 5 :(得分:0)

无论您选择哪种解决方案来检查大学是否为空,请尝试从存储过程中提取IF条件,因为它会降低执行速度并消耗执行计划的内存。最好的方法是在查询中使用IF条件,并根据条件的满足情况调用两个不同的存储过程

答案 6 :(得分:0)

您可以在插入值时简单地包含参数检查。如果您未指定任何值,则会将“航空”设置为默认值

insert into #MyTbl (FirstName,LastName,University) values(@firstname,@lastname,isnull(@university, 'Aviation'))

由于