2010-05-04 40 views
0

我需要用我在mysql表中选择的记录的Insert语句创建一个脚本文件。如何使用Insert语句为在MySql中选择的记录创建脚本?

例如,当我做Select * from emp where empid = 5,并说我得到10条记录作为结果。 现在我应该创建一个带有10条记录的插入语句的脚本文件到emp表。

我使用C#作为后面的代码...

怎么样?

+0

由于没有人知道你想要插​​入什么,所以你最好举一个你的表,数据和这些插入查询的例子。 – 2010-05-04 06:24:21

+0

@Col。 Shrapnel,我有两个数据库A和B.这两个数据库都有相同的表格模式。所以我想从一个表中选择并插入另一个数据库中的类似表中。为此,我需要为任何选定的记录创建一个Insert脚本。在这里写脚本是为了我的项目需求。 – Anuya 2010-05-04 06:28:02

+0

Offcourse你知道如果两个表都在同一台服务器上,你可以插入B SELECT * FROM A,对吧? (或对该查询的改进) – Konerak 2010-05-04 07:30:49

回答

0
DELIMITER $$ 

DROP PROCEDURE IF EXISTS `sample`.`InsGen` $$ 
CREATE DEFINER=`root`@`localhost` PROCEDURE `InsGen`(
in_db varchar(20), 
in_table varchar(20), 
in_ColumnName varchar(20), 
in_ColumnValue varchar(20) 
) 
BEGIN 

declare Whrs varchar(500); 
declare Sels varchar(500); 
declare Inserts varchar(200); 
declare tablename varchar(20); 
declare ColName varchar(20); 


set tablename=in_table; 


# Comma separated column names - used for Select 
select group_concat(concat('concat(\'"\',','ifnull(',column_name,','''')',',\'"\')')) 
INTO @Sels from information_schema.columns where table_schema=in_db and table_name=tablename; 


# Comma separated column names - used for Group By 
select group_concat('`',column_name,'`') 
INTO @Whrs from information_schema.columns where table_schema=in_db and table_name=tablename; 


#Main Select Statement for fetching comma separated table values 

set @Inserts=concat("select concat('insert IGNORE into ", in_db,".",tablename," values(',concat_ws(',',",@Sels,"),');') 
as MyColumn from ", in_db,".",tablename, " where ", in_ColumnName, " = " , in_ColumnValue, " group by ",@Whrs, ";"); 

PREPARE Inserts FROM @Inserts; 

EXECUTE Inserts;      

END $$ 

DELIMITER ; 
0

那么现在你的问题是有道理的。 您可以在一个查询

INSERT INTO B.emp SELECT * FROM A.emp WHERE empid = 5 
0

它曾与Norhtwind.Customer表内做到这一点。

using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Text; 
    using System.Data.Common; 
    using System.Data; 
    using System.Data.Odbc; 
    using System.IO; 
    using System.Threading; 
    namespace DataAccessLayer 
    {  
     public class DBManager 
     { 
      //FILE LOGGER METHOD 
      public void SqlLogger(string SqlText) 
      { if (!File.Exists("SQL.txt")) 
       { using (StreamWriter sw = new StreamWriter("SQL.txt")) 
        { sw.Flush(); 
         sw.Close(); 
         sw.Dispose(); 
        } 
       } 

       using (StreamWriter sw = File.AppendText("SQL.txt")) 
       { sw.WriteLine(SqlText); 
        sw.WriteLine(" "); 
        sw.Flush(); 
        sw.Close(); 
        sw.Dispose(); 
       } 

      } 

      // DATABASE METHODS 
      public static OdbcConnection g_con = new OdbcConnection("Dsn=wsodbc1");  
      public DBManager() 
      { 

      } 
      public OdbcConnection GetConnection() 

      { try { g_con.Open();   } 
       catch (Exception ex)  {  } 
       return g_con;    
      } 
      public OdbcCommand GetCommand(string Query) 
      { 
       OdbcCommand cmd = new OdbcCommand(Query); 
       cmd.Connection = GetConnection(); 
       return cmd; 
      } 
      public void ExeCommand(string Query) 
      { 
       OdbcCommand cmd = GetCommand(Query); 
       cmd.ExecuteNonQuery();  


      } 
      public OdbcDataReader GetReader(string Query) 
      { return GetCommand(Query).ExecuteReader();  } 

      // SQL INSERT GENERATOR 
      public void GenerateSql(string tablename) 
      { 
       File.Delete("SQL.txt"); 
       List<string> cols = new List<string>(); 
       string ColNames; 


       OdbcDataReader reader = GetReader("SELECT  * FROM   Customers "); 

       DataTable schemaTable = reader.GetSchemaTable(); 

       foreach (DataRow row in schemaTable.Rows) 
       { foreach (DataColumn column in schemaTable.Columns) 
       {   
        if (column.ColumnName.Equals("ColumnName")) cols.Add(row[column].ToString().ToUpper());      
        } 
       } 


        ColNames = string.Join(",", cols.ToArray()); 


        while (reader.Read()) 
       { 

        SqlLogger("INSERT INTO " + tablename + " (" + ColNames + ") VALUES (" + Row_Values(reader) + ")"); 

       } 

      } 
      public string Row_Values(OdbcDataReader r) 
      { 
        List<string> colsVals = new List<string>(); 

        for (int i = 0; i < r.FieldCount; i++) 
        { 

         if (r[i].GetType().ToString().Equals("System.String")) 
         { 
          if (r[i] == null) 
          { 
           colsVals.Add("NULL"); 
          } 
          else 
          { 
           colsVals.Add("'" + r[i].ToString().Replace("'","''").Replace(",","-") + "'"); 
          } 

         } 
         else if (r[i].GetType().ToString().Equals("System.DBNull")) 
         { 
          colsVals.Add("NULL"); 
         } 
         else 

         { 
          if (r[i] == null) 
          { 
           colsVals.Add("NULL"); 
          } 
          else 
          { 
           var VAL = r[i].ToString(); 
           colsVals.Add("'" + VAL.ToString().Replace("'", "''").Replace(",", "-") + "'"); 
          } 

         } 
        } 

        return string.Join(",", colsVals.ToArray()); 
      } 
     } 
    }