Cómo actualizar los datos en una tabla de los datos correspondientes en otra tabla en SQL Server 2005

Tengo dos tablas en diferentes bases de datos en el mismo servidor de base de datos.

Ambas bases de datos tienen la misma estructura, pero diferentes datos. Database1 (Test1) es la última y database2 (Test2) es una copia antigua de la base de datos.

  • Test1 tiene una tabla llamada Employee con 3000 registros
  • Test2 tiene una tabla llamada Employee con 1000 registros

Necesito actualizar la tabla en Test1 de la misma tabla en Test2 para una columna particular llamada DeptID, porque los valores en la tabla Employee en Test2 DB (el anterior) se han actualizado. Entonces necesito actualizar la tabla en la nueva base de datos de la tabla en la base de datos antigua que tiene alrededor de 1000 filas.

En otras palabras, necesito actualizar la columna DeptID en la tabla Employee en el DB Test1 con los valores que tengo en la columna DeptID en la tabla Employee en Test2 DB.

Sé que puedo restaurar el DB en sí, pero esa no es una solución. Necesito actualizar los valores en la base de datos Test1 desde la base de datos Test2.

Si las dos bases de datos están en el mismo servidor, debería poder crear una statement SQL como esta:

 UPDATE Test1.dbo.Employee SET DeptID = emp2.DeptID FROM Test2.dbo.Employee as 'emp2' WHERE Test1.dbo.Employee.EmployeeID = emp2.EmployeeID 

De su publicación, no estoy del todo claro si desea actualizar Test1.dbo.Employee con los valores de Test2.dbo.Employee (eso es lo que hace mi consulta), o al revés (ya que menciona el db en Test1 era la nueva mesa ……)

 update t2 set t2.deptid = t1.deptid from test1 t1, test2 t2 where t2.employeeid = t1.employeeid 
 UPDATE table1 SET column1 = (SELECT expression1 FROM table2 WHERE conditions) [WHERE conditions]; 
 update test1 t1, test2 t2 set t2.deptid = t1.deptid where t2.employeeid = t1.employeeid 

no puede usar la palabra clave para el mysql

Pruebe una consulta como

 INSERT INTO NEW_TABLENAME SELECT * FROM OLD_TABLENAME; 

esto funciona de maravilla: no es su turno de llamar a este procedimiento código de forma con DataTable con esquema que coincide exactamente con el cliente de la tabla custType create (id int identity (1,1) clave primaria, nombre varchar (50), cnt varchar (10))

  create type custType as table ( ctId int, ctName varchar(20) ) insert into customer values('y1', 'c1') insert into customer values('y2', 'c2') insert into customer values('y3', 'c3') insert into customer values('y4', 'c4') insert into customer values('y5', 'c5') declare @ct as custType insert @ct (ctid, ctName) values(3, 'y33'), (4, 'y44') exec multiUpdate @ct create Proc multiUpdate (@ct custType readonly) as begin update customer set Name = t.ctName from @ct t where t.ctId = customer.id end public DataTable UpdateLevels(DataTable dt) { DataTable dtRet = new DataTable(); using (SqlConnection con = new SqlConnection(datalayer.bimCS)) { SqlCommand command = new SqlCommand(); command.CommandText = "UpdateLevels"; command.Parameters.Clear(); command.CommandType = CommandType.StoredProcedure; command.Parameters.AddWithValue("@ct", dt).SqlDbType = SqlDbType.Structured; command.Connection = con; using (SqlDataAdapter dataAdapter = new SqlDataAdapter(command)) { dataAdapter.SelectCommand = command; dataAdapter.Fill(dtRet); } } } 
  UPDATE Employee SET Empid=emp3.empid FROM EMP_Employee AS emp3 WHERE Employee.Empid=emp3.empid 

usar test1

insertar en empleado (deptid) seleccionar deptid de test2.dbo.employee