我在database1中有tableA,而database2中的tableA都有相似数量的列和名称基本相同的表。但两者都有不同的数据。我试图从database1 / tableA获取一行并将其插入database2 / tableA。
我正在考虑这样做:
SqlConnection conn = new SqlConnection("database1")
SqlCommand cmd = new SqlCommand("Select * from tableA where id = 1");
connection.Open()
SqlDataReader reader = cmd.ExecuteReader();
if(reader !=null )
var data = reader;
connection.Close();
然后我做同样的上述步骤打开一个新连接,并尝试将数据变量值插入到database2中的tableA。
这是正确的做法吗?有更好的方法吗?
答案 0 :(得分:3)
我会使用数据库间查询来完成此操作。在MSS 2005/2008中,只要可以看到彼此,就可以将两个服务器“链接”在一起。完成后,您可以通过以点表示法指定链接服务器名称,数据库,架构所有者和表来引用链接数据库的表。这将允许INSERT SELECT:
INSERT INTO TableA --in database1
{
/*columns*/
}
SELECT /*columns*/ from remoteServer.database2.dbo.TableB
WHERE /*dupe-checking, other conditions*/
如果两个数据库在同一台服务器上,您甚至不必链接;只使用数据库名称和架构所有者(或者如果它是默认的“dbo”)在远程数据库上作为前缀,在数据库名称和表名之间使用两个点。
答案 1 :(得分:1)
您可以使用此查询
INSERT INTO DATABASE2.dbo.TABLEA T1
SELECT * FROM DATABASE1.dbo.TABLEA T2
WHERE T2.ID = 1
以下c#代码应该可以工作,前提是两个数据库都在同一台服务器上。
SqlConnection conn = new SqlConnection("Enter Connection String of DB, in which you insert the records.(in ur example it is,DATABASE2)");
string cmdText=@"INSERT INTO DATABASE2.dbo.TABLEA T2
SELECT * FROM DATABASE1.dbo.TABLEA T1
WHERE T1.ID = 1";
SqlCommand cmd = new SqlCommand(cmdText, conn);
cmd.ExecuteNonQuery();
答案 2 :(得分:0)
string connection_String = @""; //your connection string
try
{
using (SqlConnection con = new SqlConnection(connection_String))
{
string sql = "INSERT INTO table_copy_to " +
"(column1, column2, column3 ... columnn) " +
"SELECT column1, column2, column3 ... column FROM table_copy_from";
con.Open();
using (SqlCommand cmd = new SqlCommand(sql, con))
{
int rowEffected = cmd.ExecuteNonQuery();
if (rowEffected > 0)
{
Console.WriteLine("Excuted Successfully ...");
}
else
{
Console.WriteLine("Some problem occur");
}
}
}
}
catch (Exception ex)
{
Console.WriteLine("Exception : " + ex);
}