从源sql数据库复制到目标sql数据库

本文关键字:sql 数据库 目标 复制 从源 | 更新日期: 2023-09-27 17:59:50

我必须将数据从一个SQL Server数据库复制到其他SQL Server数据库。

目标SQL Server数据库中存在一些列,如Identity和其他数据类型,但源数据库中不存在这些列。源表只有术语列,但目标表有id(标识)和术语列。

在复制过程中,我得到的错误如下:

当identity_INSERT设置为ON或复制用户插入NOT for replication标识列时,必须为表"Terms"中的标识列指定显式值。

string colNames = "";
foreach (DataColumn col in ds.Tables[0].Columns)
{
    colNames += col.ColumnName + ",";
}
colNames = colNames.Remove(colNames.Length - 1, 1);
sqlCmd2.Parameters.Clear();
bool hasIdentityCol = false;
sqlCmd2.CommandType = CommandType.Text;

sqlCmd2.CommandText = "SELECT OBJECTPROPERTY(object_id('" + row["Table_Name"] + "'), 'TableHasIdentity')";
if (sqlCmd2.ExecuteScalar() != DBNull.Value && Convert.ToInt32(sqlCmd2.ExecuteScalar()) > 0)
{
    hasIdentityCol = true;
}

if (hasIdentityCol == true)
{
    sqlCmd2.CommandText = "SET IDENTITY_INSERT  dbo." + row["Table_Name"] + " ON";
    sqlCmd2.Transaction = sqlTran;
    sqlCmd2.ExecuteNonQuery();
}
sqlCmd2.CommandText = "INSERT INTO   " + txtDestinationDatabase.Text + ".dbo." + row["Table_Name"] + "(" + colNames + ")  SELECT " + colNames + " FROM " + txtSourceDatabase.Text + ".dbo." + row["Table_Name"];
sqlCmd2.Transaction = sqlTran;
sqlCmd2.ExecuteNonQuery();
if (hasIdentityCol == true)
{
    sqlCmd2.CommandText = "SET IDENTITY_INSERT " + txtDestinationDatabase.Text + ".dbo." + row["Table_Name"] + " OFF";
    sqlCmd2.Transaction = sqlTran;
    sqlCmd2.ExecuteNonQuery();
}

从源sql数据库复制到目标sql数据库

如果打开IDENTITY_INSERT,则必须为标识列指定值。您说源表没有可以复制到标识列中的列。要实现这一点,只需删除SET IDENTITY_INSERT语句,然后只复制实际拥有的列。

如果有其他列不可为null,则可能需要对这些列的值进行硬编码。