我在SQL Server 2008的同一数据库中有两个表。我想将一个表的内容复制到另一个具有相同架构的空表中,但是在执行该语句时
OleDbDataAdapter da = new OleDbDataAdapter("select * into dbo.leadmastersnew from dbo.leadmasters", myConnection);
它引发错误,表明该表已存在于数据库中。
我希望如果该表已经存在,则应删除该表,因为上述SQL查询创建了该表并将其内容复制到该表中。
请建议
我的代码是
private void button5_Click(object sender, EventArgs e)
{
OleDbConnection myConnection = new OleDbConnection("File Name=E:\\Vivek\\ImplementUdl\\ImplementUdl\\new.udl");
try
{
myConnection.Open();
if (myConnection.State == ConnectionState.Open)
MessageBox.Show("Connection opened successfully!");
else
MessageBox.Show("Connection could not be established");
DataSet ds = new DataSet();
OleDbDataAdapter da = new OleDbDataAdapter("select * into dbo.leadmastersnew from dbo.leadmasters", myConnection);
da.Fill(ds);
MessageBox.Show("Data Copied!!");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
myConnection.Close();
}
return;
}
最佳答案
我将创建一个空表(如果尚不存在),然后将其复制到数据中。如果可能的话,请勿使用udl文件进行连接,而应将连接字符串存储在其他位置
using(var conn = new SqlConnection("<connectionstring>"))
using(var cmd = new SqlCommand(@"
if object_id('dbo.leadmastersnew') is null
begin
select * into dbo.leadmastersnew from dbo.leadmasters where 1=2
alter table dbo.leadmastersnew add primary key (<key>)
end
insert into dbo.leadmastersnew
select *
from dbo.leadmasters lm
where not exists(select * from dbo.leadmastersnew lmn where lm.<key> = lmn.<key>)", conn))
{
conn.Open();
cmd.ExecuteNonQuery();
}
请注意,在where子句中,您需要填写正确的
<key>
列。我还向新表添加了主键约束,因为select into不会复制源表的主键/索引。关于c# - C#检查数据库中是否存在表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26119637/