初学SQL遇到一些问题,请大家赐教,如果问题太简单,请大家别笑.
问题一:
如果让2个表的数据联系起来,比如说
A表里有
姓名  年龄 编号 成绩
 张    18  001   90
 李    20  002   80
B表里有
编号  成绩
001   90
002   80
现在修改B表里的编号或者成绩,A表也跟着修改,这样的应该怎么做?
问题二:
一个存储过程
create proc 工资查询 @职员姓名 char(10)='',@日期 char(10)=''
as
begin
if @职员姓名='' and @日期=''
begin
select 职员信息表.职员姓名,工资发放历史表.* from 职员信息表 inner join 工资发放历史表 on 职员信息表.职员编号=工资发放历史表.职员编号
return
end
else
if @职员姓名!='' and @日期=''
begin
select 职员信息表.职员姓名,工资发放历史表.* from 职员信息表 inner join 工资发放历史表 on 职员信息表.职员编号=工资发放历史表.职员编号 and 职员信息表.职员姓名=@职员姓名
return
end
else
if @职员姓名='' and @日期!=''
begin
select 职员信息表.职员姓名,工资发放历史表.* from 职员信息表 inner join 工资发放历史表 on 职员信息表.职员编号=工资发放历史表.职员编号 and 工资发放历史表.日期=@日期
return
end
else
begin
select 职员信息表.职员姓名,工资发放历史表.* from 职员信息表 inner join 工资发放历史表 on 职员信息表.职员编号=工资发放历史表.职员编号 and 工资发放历史表.日期=@日期 and 职员信息表.职员姓名=@职员姓名
return
end
end
我在C#里连接操作数据库
SqlConnection conn=new SqlConnection("server=.;database=人力资源管理系统;uid=sa;pwd=;");
try
{
conn.Open();
SqlCommand comm=new SqlCommand("工资查询",conn);
comm.CommandType=CommandType.StoredProcedure;
comm.Parameters.Add("@职员姓名",textBox1.Text);
comm.Parameters.Add("@日期",textBox2.Text);
SqlDataAdapter sda=new SqlDataAdapter(comm);
DataSet ds=new DataSet();
sda.Fill(ds);
dataGrid1.DataSource=ds.Tables["工资发放"].DefaultView;
}
catch(Exception M)
{MessageBox.Show(M.Message);}
他却不行,请大家帮帮,先谢谢大家了,十万火急,在线等

解决方案 »

  1.   

    问题一:
    如果让2个表的数据联系起来,比如说
    A表里有
    姓名  年龄 编号 成绩
     张    18  001   90
     李    20  002   80
    B表里有
    编号  成绩
    001   90
    002   80
    现在修改B表里的编号或者成绩,A表也跟着修改,这样的应该怎么做?
    create trigger B_change on B
    for update
    as
    update A set 编号 = updated.编号, 成绩 = updated.成绩 from A inner join deleted c on  A.编号 = c.编号
      

  2.   

    dataGrid1.DataSource=ds.Tables["工资发放"].DefaultView;
    改为
    dataGrid1.DataSource=ds.Tables[0].DefaultView;
    试试
      

  3.   

    alter table B表 add constraint B表_con foreign key(编号)references A表(编号)  on update cascade
    楼主的问题添加一个级联更新就行了
      

  4.   

    第2个问题像 fellowcheng(小小乌鸦)  一样,成功了大家能不能给段在存储过程中使用触发器的代码?谢谢了
      

  5.   

    去掉两个else
    create proc 工资查询 @职员姓名 char(10)='',@日期 char(10)=''
    as
    begin
    if @职员姓名='' and @日期=''
    begin
    select 职员信息表.职员姓名,工资发放历史表.* from 职员信息表 inner join 工资发放历史表 on 职员信息表.职员编号=工资发放历史表.职员编号
    return
    end
    else--去掉
    if @职员姓名!='' and @日期=''
    begin
    select 职员信息表.职员姓名,工资发放历史表.* from 职员信息表 inner join 工资发放历史表 on 职员信息表.职员编号=工资发放历史表.职员编号 and 职员信息表.职员姓名=@职员姓名
    return
    end
    else--去掉
    if @职员姓名='' and @日期!=''
    begin
    select 职员信息表.职员姓名,工资发放历史表.* from 职员信息表 inner join 工资发放历史表 on 职员信息表.职员编号=工资发放历史表.职员编号 and 工资发放历史表.日期=@日期
    return
    end
    else
    begin
    select 职员信息表.职员姓名,工资发放历史表.* from 职员信息表 inner join 工资发放历史表 on 职员信息表.职员编号=工资发放历史表.职员编号 and 工资发放历史表.日期=@日期 and 职员信息表.职员姓名=@职员姓名
    return
    end
    end
      

  6.   

    create trigger a on tablea
    for update
    as
    if update(成绩)
    begin
    update tableb set 成绩=a.成绩 from tablea,inserted a where tableb.编号=a.编号
    end
      

  7.   

    现在第一个问题的意思就是,在表B里修改数据,表A跟着改,那如果是在表A修改数据,表B也应该跟着改吧,能不能用一个触发器或者存储过程来完成呢?
      

  8.   

    用触发器这个类型(instead of insert)你可以对触发的语句进行操作。
    偶写了几个这方面的列子
    http://blog.csdn.net/roy_88
    http://blog.csdn.net/roy_88/archive/2006/12/01/1424370.aspx