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

大学有默认值: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','' 它必须只插入到表中,名字和姓氏大学将是 Aviation,因为它是默认值

4

7 回答 7

2

如果您的“大学”列的默认名称始终是Aviation,我会建议这种方法。

为“大学”列设置默认值约束,如果值为空,它将自动插入默认值。

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

希望这可以帮助

于 2013-10-30T08:31:24.997 回答
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'
于 2013-10-30T08:24:14.433 回答
1

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

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

ALTER TABLE myTbl
ALTER COLUMN Univesity SET DEFAULT 'Aviation'

PS如果您只需要使用存储过程,那么您可以参考上述答案。

于 2013-10-30T08:31:10.443 回答
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
于 2013-10-30T08:19:25.590 回答
0

只需在 insert into 语句之前添加以下内容:

如果@university 为null 设置@university = null

于 2013-10-30T08:25:48.933 回答
0

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

于 2013-10-30T11:08:02.537 回答
0

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

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

谢谢

于 2013-10-30T12:59:32.987 回答