declare @xuehao varchar(20)
set @xuehao=(select 学号 from 学生列表 where 姓名='小明')
declare @bianhao varchar(20)
set @bianhao=(select 编号 from 课程列表 where 名称='语文')insert table(学号,编号,分数)
values(@xuehao,@bianhao,89)

解决方案 »

  1.   

    insert into 成绩表
    select (select 学号 from 学生列表 where 姓名='小明') a ,
    (select 编号 from 课程列表 where 名称='语文') b,89
      

  2.   

    按楼主的意思好像几个表之间没什么关系,这样的话就按照aw511(点点星灯) 的来吧,如果几个表存在联系的话可能用一个sql来解决
      

  3.   

    我想在一个sql语句中实现呀,summerICEREDTEA的写法好像有语法错误呀
    我用的是access数据库,能创建存储过程吗?
      

  4.   

    access 不了解  我的SQLSERVER 2K 测试成功
      

  5.   

    是吗?你这里的a和b应该是学号和课程编号吧
    insert into 成绩表 select (select 学号 from 学生列表 where 姓名='小明') 学号 ,(select 编号 from 课程列表 where 名称='语文') 课程编号,89把它写成一行是不是应该就是上边这句呢?
      

  6.   

    insert into 成绩表
    select (select 学号 from 学生列表 where 姓名='小明') a ,
    (select 编号 from 课程列表 where 名称='语文') b,89这种方法有问题哦.
    如果有两个学生都叫'小明'呢?  同理, 点点星灯的也有这样的问题.具体完善的方法可以这样做.
    在第一种方法中加top 1;
    在第二种方法中, 改set @xuehao=(select 学号改为 select @xuehao=学号(课程编号的类似)
      

  7.   

    insert 成绩表 select (select max(学号) from 学生列表 where 姓名='小明'),
    (select max(编号) from 课程列表 where 名称='语文'),89
      

  8.   

    --成绩表
    declare @tb1 table([学号] varchar(10),[课程编号] varchar(10),[分数] decimal(4,1))
    --学生列表
    declare @tb2 table([学号] varchar(10),[姓名] varchar(10))
    --课程列表
    declare @tb3 table([编号] varchar(10),[名称] varchar(10))
    insert @tb2 select '001','小明'
    insert @tb3 select 'Y102','语文'--测试
    insert @tb1 
    select (select [学号] from @tb2 where [姓名]='小明'),
           (select [编号] from @tb3 where [名称]='语文'),
           89
    --查看
    select * from @tb1--结果
    /*
    学号         课程编号       分数     
    ---------- ---------- ------ 
    001        Y102       89.0(所影响的行数为 1 行)
    */