如何在sql server中为int类型分配NULL类型

如何在sql server中为int类型分配NULL类型,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,遵循我的代码 begin declare @Iorder int set @Iorder=0 declare @no int set @no=(select MAX(IOrder) from Team) if @no=NULL set @Iorder=1 else begin set @Iorder=(select MAX(IOrder) from Team) se

遵循我的代码

begin
    declare @Iorder int 
    set @Iorder=0
    declare @no int
    set @no=(select MAX(IOrder) from Team)
    if @no=NULL
        set @Iorder=1
    else
        begin 
            set @Iorder=(select MAX(IOrder) from Team)
            set @Iorder=@Iorder+1
        end 
end
如果团队表中没有行
请从团队中选择MAX(IOrder)
语句返回
NULL
值,因此语句
如果@no=NULL
不正确,因为
@no
int
类型,那么SQL Server返回的错误
NULL值将通过聚合或其他集合操作消除。

那么如何修复它呢?

使用
的测试为空

begin
    declare @Iorder int 
    set @Iorder=0
    declare @no int
    set @no=(select MAX(IOrder) from Team)
    if @no is null
        set @Iorder=1
    else
        begin 
            set @Iorder=(select MAX(IOrder) from Team)
            set @Iorder=@Iorder+1
        end 
end
declare @Iorder int 
select @Iorder = 1 + isnull(max(IOrder), 0) from Team
您的代码可以改为使用
isnull()
重写

begin
    declare @Iorder int 
    set @Iorder=0
    declare @no int
    set @no=(select MAX(IOrder) from Team)
    if @no is null
        set @Iorder=1
    else
        begin 
            set @Iorder=(select MAX(IOrder) from Team)
            set @Iorder=@Iorder+1
        end 
end
declare @Iorder int 
select @Iorder = 1 + isnull(max(IOrder), 0) from Team

您可以简单地用一个简短的形式完成这一切

试试这个:

begin
    declare @Iorder int 
    SELECT @Iorder = ISNULL(MAX(IOrder),0)+1 FROM Team
end
说明:

如果
MAX(Iorder)
为空,则
@Iorder
将为1(即0+1)


否则,
@Iorder
将是
MAX(Iorder)+1
使用
从团队中选择ISNULL(MAX(Iorder),0)(如果为null,则返回0)并删除if-else以检查null值,
从团队中选择ISNULL(MAX(Iorder),0)+1(如果您想要增加值)

@TienKenji,然后如果你不知道如何接受答案,请。