2014-05-16 42 views
0

按照我的代码如何分配SQL Server中的int类型NULL类型

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 @[email protected]+1 
     end 
end 

如果团队表没有行select MAX(IOrder) from Team语句返回NULL值,以便声明if @no=NULL是不正确的,因为@noint类型,那么SQL服务器返回一个错误Null value is eliminated by an aggregate or other SET operation. 那么如何解决它?

回答

0

使用is 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 @[email protected]+1 
     end 
end 

您的代码可以改为使用isnull()代替。

declare @Iorder int 
select @Iorder = 1 + isnull(max(IOrder), 0) from Team 
+0

这是正确的。非常感谢。 – TienKenji

0

您可以简单地以简短形式完成此操作。

尝试这种情况:

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

说明:

@Iorder为1(即,0 + 1),如果是MAX(IOrder) NULL。

否则,@Iorder将是MAX(IOrder)+1

+0

没错。非常感谢你。 – TienKenji

+0

@TenKenji:那么请随时接受答案。如果您不知道如何接受答案,请[**阅读此**](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)。 –

0

使用SELECT ISNULL(MAX(IOrder),0) FROM Team(返回0空的情况下),然后卸下的if else检查空值,SELECT ISNULL(MAX(IOrder),0) + 1 FROM Team如果你想增加的值

相关问题