C#实现SqlServer复制一个表的数据到另一个表

SqlServer复制一个表的数据到另一个表大体上分两种情况,第一种情况是目标表当前不存在的情况,下面代码中将TPerson表数据复制到TNew表中,TNew表当前不存在。

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        static string ConnectionString = @"Data Source=(localdb)\Projects;Initial Catalog=DbTest;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False";

        static void Main(string[] args)
        {
            using (SqlConnection connection = new SqlConnection(ConnectionString))
            {
                SqlCommand command = new SqlCommand();
                command.Connection = connection;
                command.CommandText = "select * into [TNew] from [TPerson]";
                try
                {
                    connection.Open();
                    command.ExecuteNonQuery();
                    Console.WriteLine("复制表成功");
                }
                catch
                {
                    Console.WriteLine("复制表失败");
                }
            }
            Console.ReadKey(true);
        }
    }
}

第二种情况是目标表当前已经存在,此时又需要分两种情况,第一种情况:TPerson表的主键为自增Id,此时只能选择非主键列进行复制,代码如下:

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        static string ConnectionString = @"Data Source=(localdb)\Projects;Initial Catalog=DbTest;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False";

        static void Main(string[] args)
        {
            using (SqlConnection connection = new SqlConnection(ConnectionString))
            {
                SqlCommand command = new SqlCommand();
                command.Connection = connection;
                command.CommandText = "insert into [TNew] select Name,Gender from [TPerson]";

                try
                {
                    connection.Open();
                    command.ExecuteNonQuery();
                    Console.WriteLine("复制表成功");
                }
                catch
                {
                    Console.WriteLine("复制表失败");
                }
            }
            Console.ReadKey(true);
        }
    }
}

第二种情况:TPerson表主键为非自增Id,此时可选择全部列进行复制,代码如下:

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        static string ConnectionString = @"Data Source=(localdb)\Projects;Initial Catalog=DbTest;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False";

        static void Main(string[] args)
        {
            using (SqlConnection connection = new SqlConnection(ConnectionString))
            {
                SqlCommand command = new SqlCommand();
                command.Connection = connection;
                command.CommandText = "insert into [TNew] select * from [TPerson]";

                try
                {
                    connection.Open();
                    command.ExecuteNonQuery();
                    Console.WriteLine("复制表成功");
                }
                catch
                {
                    Console.WriteLine("复制表失败");
                }
            }
            Console.ReadKey(true);
        }
    }
}
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,您需要在C#中使用SQL Server连接字符串连接到您的数据库。然后,您可以使用SQL查询从两个中获取数据,将结果存储在一个DataTable中。接下来,您可以将DataTable中的数据复制一个数组中,并使用Array.Sort方法对其进行排序。以下是一个简单的示例代码: ```csharp using System; using System.Data; using System.Data.SqlClient; class Program { static void Main(string[] args) { string connectionString = "Data Source=myServerAddress;Initial Catalog=myDataBase;User ID=myUsername;Password=myPassword"; string query = "SELECT * FROM Table1 UNION ALL SELECT * FROM Table2"; SqlDataAdapter adapter = new SqlDataAdapter(query, connectionString); DataTable dataTable = new DataTable(); adapter.Fill(dataTable); // Copy data to array DataRow[] rows = new DataRow[dataTable.Rows.Count]; dataTable.Rows.CopyTo(rows, 0); // Sort array Array.Sort(rows, (a, b) => ((int)a["ID"]).CompareTo((int)b["ID"])); // Print sorted array foreach (DataRow row in rows) { Console.WriteLine(row["ID"] + " " + row["Name"]); } } } ``` 在上面的示例中,我们使用UNION ALL运算符将两个中的数据合并到一个查询中。然后,我们使用SqlDataAdapter将查询结果填充到一个DataTable中。接下来,我们使用DataRow数组将DataTable中的数据复制一个数组中,并使用Array.Sort方法对其进行排序。最后,我们遍历排序后的数组并打印每一行的ID和Name。请注意,我们使用了一个lambda达式作为比较器来比较行的ID值。您可以根据需要修改比较器来排序不同的列或以不同的顺序排序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值