我要从一个数据库A的表Member中将其数据查询出来,放到现有数据库B中的两个表里,一个存要同步过来的字段名,一个存同步过来的字段值,但是Member表查出来的结果是:
MID Name  Phone Mail        Role   InDate 
 1  张三  1234  [email protected]  Admin  2011-9-9   
 2  李四  2121  [email protected]  User   2011-9-10 
可是同步过来后需要存入两个表里
表1:ID   FieldName         表2:ID  MID FieldID Content
      1   Name                    1   1    1      张三
      2   Phone                   2   1    2      1234
      3   Mail                    3   1    3      [email protected]
      4   Role                    4   1    4      Admin
      5   InDate                  5   1    5      2011-9-9  
                                  6   2    1      李四
                                  7   2    2      2121  
                                  8   2    3      [email protected]
                                  9   2    4      User
                                  10  2    5      2011-9-10 
怎样才能将Member表里的数据都放入这两个表中?

解决方案 »

  1.   

    如果是.net程序,只要二次循环就搞定了吧DataTable dt= select * from a.member;
    for(int i=0;i<dt.rows.count;i++)
    {
       for(int j=0;j<dt.column.count;j++)
       {
       insert into b.a (i,dt.rows 列);   insert into b.b (id,i,dt.rows 列,dt.rows[i][j])
    }
    }
      

  2.   

    查询指定数据表中的所有列的列名:SELECT name FROM syscolumns 
    WHERE  id = object_id('TableName') 
    ORDER BY colorder
      

  3.   


    首先你取出member表字段名称
    select [name] from 你的数据库名..syscolumns where id=object_id('Member')
    结果:设为 数据1
    MID 
    Name 
    Phone 
    Mail
    Role 
    InDate  
    之后,你把这些值插入表1,
    再取出它们对应的FieldID
    select ID from 表2 where FieldName in 数据1结果设为:数据2
    把数据2排序(升序),好为下一步能对应的上下面往表2插入数据,假设datatble dt 已经准备好数据(
    MID Name Phone Mail Role InDate  
     
    1 张三 1234 [email protected] Admin 2011-9-9
    )  for(int k=0;k<dt.rows.count;k++) 
         {
           for(int i;i<数据2长度;i++)      {
            for(int j=1;j<数据2长度;j++)
            {
              insert into 表2 values(dt.rows[k].itemarray[0].ToString(),dt.rows[k].itemarray[1].ToString(),数据2[i],dt.rows[k].itemarray[j].ToString());
             }
          }
         }
    这是伪代码。楼主不明白的再问我
      

  4.   

    实例:测试数据/*测试数据*//*数据库A*/
    create database Ause Acreate table Member
    (
    [MID] int identity primary key,
    [Name] nvarchar(20),
    [Phone] nvarchar(20),
    [Mail] nvarchar(255),
    [Role] nvarchar(20),
    [InDate] nvarchar(20)
    )insert into Member
    select '张三','1234','[email protected]','Admin','2011-9-9' union all
    select '李四','2121','[email protected]','User','2011-9-10'
    /*数据库B*/
    create database Buse Bcreate table B_Field
    (
    [ID] int identity primary key,
    [FieldName] nvarchar(80)
    )create table B_Data
    (
    [ID] int identity primary key,
    [MID] nvarchar(20),
    [FieldID] nvarchar(20),
    [Content] nvarchar(255)
    )Default.aspx.cs代码:protected void Page_Load(object sender, EventArgs e)
        {
            DataTable aField = new DataTable();  //字段记录集
            DataTable aData = new DataTable();  //数据记录集        DataTable bfield = new DataTable();        string connString1 = "server=.;user id=sa;pwd=111;database=A";
            string connString2 = "server=.;user id=sa;pwd=111;database=B";        using (SqlConnection conn = new SqlConnection(connString1))
            {
                conn.Open();
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = conn;            SqlDataAdapter da = new SqlDataAdapter(cmd);            cmd.CommandText = "select Name from syscolumns where id = object_id('Member')";
                da.Fill(aField);            cmd.CommandText = "select * from member";
                da.Fill(aData);
            }        using (SqlConnection conn = new SqlConnection(connString2))
            {
                conn.Open();
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = conn;            SqlDataAdapter da = new SqlDataAdapter(cmd);            for (int i = 0, dc = aField.Rows.Count; i < dc; i++)
                {
                    cmd.CommandText = string.Format("insert into B_Field values('{0}')", aField.Rows[i]["Name"].ToString());
                    cmd.ExecuteNonQuery();
                }            cmd.CommandText = "select * from B_Field";
                da.Fill(bfield);            for (int i = 0, dc1 = aData.Rows.Count; i < dc1; i++)
                {
                    for (int j = 0, dc2 = bfield.Rows.Count; j < dc2; j++)
                    {
                        string fieldId = bfield.Rows[j]["ID"].ToString();
                        string fieldName = bfield.Rows[j]["FieldName"].ToString();
                        cmd.CommandText = string.Format("insert into B_Data values('{0}','{1}','{2}')", aData.Rows[i]["MID"], fieldId, aData.Rows[i][fieldName]);
                        cmd.ExecuteNonQuery();
                    }
                }
            }
        }
    已经测试
      

  5.   

    测试以及通过LZ可以自己加强几点:1. 取字段的时候,不要取主键,即MID,我现在的代码把MID也存储到B_Field的
    2. 程序多次运行,会多次插入数据到B_Field和B_Data,你可以加个判断机制