现在有一个datetime类型数据, 传入的字符传为空时, 它默认插入了1900-01-01的值, 我希望当为空时应该用null来update, 该如何去实现呢

解决方案 »

  1.   

    那你就不要插入空字符串,判断一下,如果为空,就设置为NULL值,再插入,举例如下:
    use tempdb
    gocreate table t1(datecol datetime)
    godeclare @s varchar(10)set @s = ''set @s = case when @s = '' then null else @s end  --这里做这样的判断insert t1 select @s
    goselect * from t1
    godrop table t1
    go
      

  2.   

    那你就不要插入空字符串,判断一下,如果为空,就设置为NULL值,再插入,举例如下:
    use tempdb
    gocreate table t1(datecol datetime)
    godeclare @s varchar(10)set @s = ''set @s = case when @s = '' then null else @s end  --这里做这样的判断insert t1 select @s
    goselect * from t1
    godrop table t1
    go
      

  3.   

    为空时
    declare @tb table(a datetime)
    declare @str1 varchar(10);
    set @str1='';
    if len(@str1)=0 
    set @str1=null
    insert @tb select @str1select * from @tba                                                      
    ------------------------------------------------------ 
    NULL(所影响的行数为 1 行)
    不为空时
    declare @tb table(a datetime)
    declare @str1 varchar(10);
    set @str1='2008-10-21';
    if len(@str1)=0 
    set @str1=null
    insert @tb select @str1select * from @tba                                                      
    ------------------------------------------------------ 
    2008-10-21 00:00:00.000(所影响的行数为 1 行)
      

  4.   

    isnull(<传入值>,null)方法我问前试过,像这样update <table> set <field>=isnull(?,null)....没有用;而判断的方法, 是在存储过程中才可以用的吧,我用的是batchSQL来做的,因为传入的存储变量数是可变的,可能是1条,也可能是n条,存储过程不好来做。我试着用, 如果为空存入空对象方法来做,不过一样会update为1900-01-01,请问还有什么好的建议。
      

  5.   

    declare @t table([date] datetime)
    declare @s varchar(10)
    set @s = ''
    insert @t select case when @s='' then null else @s end  --这里做判断
    select * from @t
      

  6.   

    http://www.ebigear.com/register-sunshareforever.html
      

  7.   

    设置列允许为空,不要给默认值
    然后
    update tb set col = @参数
    即可@参数若为null,则列将被更新为null若你指的@参数为''时,更新为null
    那么:update tb set col=nullif(@参数,'')这样,当@参数为null或为''都将把列置为null