하나의 SQL Server 데이터베이스에서 다른 SQL Server 데이터베이스로 데이터를 복사해야합니다.원본 SQL 데이터베이스에서 대상 SQL 데이터베이스로 복사
대상 SQL Server DB에는 있지만 소스 데이터베이스에는없는 Identity 및 다른 데이터 형식 같은 열이 있습니다. 원본 테이블에는 용어 열만 있지만 대상 테이블에는 ID (ID)와 용어 열이 있습니다. 내가 같은 오류가 발생하고 복사하는 동안
:
명시 값이 '약관'중 하나 IDENTITY_INSERT가 설정되어있을 때 ON 또는 복제 사용자가 NOT REPLICATION FOR에 삽입 할 때 테이블의 ID 열을 지정해야합니다 식별 열.
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();
}
MS Access와 관련이 있습니까? 또한 원본 테이블과 대상 테이블의 정의는 무엇입니까? 소스에 ID가 없다고 언급 했으므로 대상 열에 어떤 열을 삽입하려고합니까? 이 열이 포함되어서는 안되며 자체적으로 채워질 수 있습니다. –
실제 작업은 MS Access 데이터를 SQL Server로 복사하는 것입니다. SQL 데이터베이스 스키마가 변경되었습니다. MS Access의 테이블에는 필드 용어 만 있고 SQL DB에는 ID (Identity), 용어 필드가 있습니다. –