update [员工信息] set [仓库]=(select (case when [权限].[仓库] is null then '' else [权限].[仓库] end) from [权限] where [ID]=[员工信息].[权限])提示:不能将 null 值插入列‘仓库’,表‘dbo.员工信息’;列不允许有 null 值。列 仓库 是 nvarchar(20) not null default ''.请问怎么才能用sql语句成功更新呢?谢谢。

解决方案 »

  1.   

     set [仓库]=ISNULL((select (case when [权限].[仓库] is null then '' else [权限].[仓库] end) from [权限] where [ID]=[员工信息].[权限]),'')
      

  2.   

    update 
      [员工信息] 
    set 
      [仓库]=isnull([权限].[仓库],'')
    from 
      [权限] 
    where 
      [ID]=[员工信息].[权限])
      

  3.   

    update 
      [员工信息] 
    set 
      [仓库]=isnull((select (case when [权限].[仓库] is null then '' else [权限].[仓库] end) 
    from 
      [权限] 
    where 
      [ID]=[员工信息].[权限]),'')
      

  4.   

    set [仓库]=ISNULL((select (case when [权限].[仓库] is null then '' else [权限].[仓库] end) from [权限] where [ID]=[员工信息].[权限]),'')或
    把  nvarchar(20) not null default --not null改成null就行了!
      

  5.   

    --呵呵:非空字段,是不允许插入空值的,不然就不叫“非空了”
    --所以:得先把这个字段的非空属性(NOT NULL) 修改为可空属性(NULL)
    --再去执行插入操作,操作过后,还原该字段为非空属性即可!
      

  6.   

    当[权限]表中没有和[员工信息]匹配的记录时,楼主的语句就会产生NULL值,所以正确的写法如下:
    update 
      [员工信息] 
    set 
      [仓库]=isnull([权限].[仓库],'')
    from 
      [权限] 
    where 
      [ID]=[员工信息].[权限])
    这样只有找到匹配记录时才替换