就是我如何在数据库里插入一条带子查询的语句,说明下我创建的是两个表分别为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 失败。
语句已终止。
insert into B(B3) select A.A1 from A;错误消息:
消息 515,级别 16,状态 2,第 1 行
不能将值 NULL 插入列 'B1',表 'C.dbo.B';列不允许有空值。INSERT 失败。
语句已终止。
数据库就会提示:
消息 156,级别 15,状态 1,第 1 行
关键字 'select' 附近有语法错误。
消息 102,级别 15,状态 1,第 1 行
')' 附近有语法错误。
用以下方法验证
declare @x varchar(20)
select @x=a1 from a
insert into b values('b001','sycc',@x)
即使插入成功了也是将记录集的最后一个字段值赋给b3
如果楼主想要实现如果在A表中不存在相应的主键,那么在B表中就不能插入相应的记录,可以考虑用触发器实现,至于用这种子查询的方法插入我想不出来怎么实现,所以和楼主一起等待高手出现……说的不对的地方请大家纠正
update B set B.B3=A.A3 from A,B where A.A1=B.B1
insert into B(B1,B2,B3) select '2','3',njid from njb
declare @temp nvarchar(50);
set @temp=(select njid from njb );//这个地放钥匙返回多条数据的话,还是只能插入第一条的
insert into B(B1,B2,B3) values ('2','3',@temp);//我试过了,这里说只能是用标量表达式
declare @temp nvarchar(50);
set @temp=(select njid from njb );//这个地放钥匙返回多条数据的话,还是只能插入第一条的
insert into B(B1,B2,B3) values ('2','3',@temp);//我试过了,这里说只能是用标量表达式
没有考虑到这个...我晕...多谢朋友提醒..