就是我如何在数据库里插入一条带子查询的语句,说明下我创建的是两个表分别为A,B其中B的B3是外键和A的A1相连接,A的A1为A表的主键而B的B1也是B表主键...我想问如何插入才不会出错呢..顺便请各位看下我插入的时候数据库的提示:数据库语句:
insert into B(B3) select A.A1 from A;错误消息:
消息 515,级别 16,状态 2,第 1 行
不能将值 NULL 插入列 'B1',表 'C.dbo.B';列不允许有空值。INSERT 失败。
语句已终止。

解决方案 »

  1.   

    可能是A1 所对应的B1 为空。 B1中的数据比A1少吧
      

  2.   

    不是..说下我的情况是当我正常插入数据时候insert into B(B1,B2,B3) values ('2','3',select njb.njid from njb);
    数据库就会提示:
    消息 156,级别 15,状态 1,第 1 行
    关键字 'select' 附近有语法错误。
    消息 102,级别 15,状态 1,第 1 行
    ')' 附近有语法错误。
      

  3.   

    楼主这条插入语句好像存在逻辑错误,select子句的查询结果是一个记录集,不应该赋给一个字段
    用以下方法验证
    declare @x varchar(20)
    select @x=a1 from a
    insert into b values('b001','sycc',@x)
    即使插入成功了也是将记录集的最后一个字段值赋给b3
    如果楼主想要实现如果在A表中不存在相应的主键,那么在B表中就不能插入相应的记录,可以考虑用触发器实现,至于用这种子查询的方法插入我想不出来怎么实现,所以和楼主一起等待高手出现……说的不对的地方请大家纠正
      

  4.   

    insert B(B3) select isnull(A.A1,'') from A;
      

  5.   

    用update
    update B set B.B3=A.A3 from A,B where A.A1=B.B1
      

  6.   

    取消关联
    insert into B(B1,B2,B3) select '2','3',njid from njb
      

  7.   

    select 附近当然有错误的  你这样查询出来的是很多的个值吧?这样的结果是个表,无法给一个字段的值。你试试  改成 
    declare @temp nvarchar(50);
    set @temp=(select njid from njb );//这个地放钥匙返回多条数据的话,还是只能插入第一条的
    insert into B(B1,B2,B3) values ('2','3',@temp);//我试过了,这里说只能是用标量表达式
      

  8.   

    select 附近当然有错误的 你这样查询出来的是很多的个值吧?这样的结果是个表,无法给一个字段的值。你试试 改成  
    declare @temp nvarchar(50);
    set @temp=(select njid from njb );//这个地放钥匙返回多条数据的话,还是只能插入第一条的
    insert into B(B1,B2,B3) values ('2','3',@temp);//我试过了,这里说只能是用标量表达式
    没有考虑到这个...我晕...多谢朋友提醒..