【问题标题】:How to set default value while insert null value into not null column SQL Server?如何在将空值插入非空列 SQL Server 时设置默认值?
【发布时间】:2016-08-12 14:45:37
【问题描述】:

我有两张桌子t1t2。两者都有idname 列。 t1 的 name 列定义为非空,默认值为 'Peter'。

我想将t2 中的所有值插入到我的t1 表中。但我在t2 表中有一些空值。当我尝试插入值时:

Insert into t1 
   select * 
   from t2;

它会抛出这个错误:

消息 515,第 16 级,状态 2,第 1 行
无法将值 NULL 插入到列“名称”、表“T1”中;列不允许空值。

当我们尝试insertnull 值时,是否有可能将默认值设置为列。

【问题讨论】:

    标签: sql sql-server insert ssms default


    【解决方案1】:

    第一个解决方案,

       insert into t1
        select id,isnull(name,'Peter') from t2
    

    第二个解决方案

    ALTER TABLE T1 ALTER COLUMN name varchar(255) NULL
    
    insert into t1
    select id,name from t2
    
    ALTER TABLE T1 ALTER COLUMN name varchar(255) NOT NULL
    

    【讨论】:

    • 如果你的列类型是uniqueidentifier,默认是(newid()),恐怕第三个解决方案会失败。无论数据类型如何,COLUMN_DEFAULT 中的所有函数调用实际上都会失败。
    【解决方案2】:

    所以不是

    Insert into t1 select * from t2
    

    您可以将查询重写为

    Insert into t1 
    select col1,col2, ISNULL(name, 'Peter'), othercolumns from t2
    

    【讨论】:

      【解决方案3】:

      使用COALESCE

      查询

      INSERT INTO t1(Id, Name)
      SELECT Id, COALESCE(Name, 'Peter') FROM t2;
      

      或者您可以使用CASE 表达式。

      查询

      INSERT INTO t1(Id, Name)
      SELECT Id, CASE WHEN Name IS NULL THEN 'Peter' ELSE Name END
      FROM t2;
      

      【讨论】:

        【解决方案4】:

        修改您的查询,如:

        Insert into t1 select COALESCE(column1,'') from t2;

        更多详情请参考以下链接

        http://www.w3schools.com/sql/sql_isnull.asp

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-12-01
          • 2013-05-19
          • 1970-01-01
          • 1970-01-01
          • 2021-12-31
          • 2012-09-11
          • 2020-12-11
          相关资源
          最近更新 更多