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

Tanto las bases de datos tienen la misma estructura, pero con diferentes datos. Database1 (Test1) es la más reciente y database2 (Test2) es una vieja copia de la base de datos.

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

Necesito para actualizar la tabla en Test1 de la misma tabla en Test2 para una columna en particular llamado DeptID, ya que los valores de la tabla Empleado en la Test2 DB (el viejo) se han actualizado. Así que tengo que actualizar la tabla en la base de datos nueva de la tabla en la DB antiguo que tiene alrededor de 1000 filas.

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

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

  • ¿Quieres sólo para actualizar los valores en las dos tablas? o qué quieren los dos cuadros idénticos?
  • Por desgracia, tu pregunta no es clara. Supongo que es difícil de expresar su problema en inglés con suficiente claridad, poco no te desesperes! Usted podría ayudar por dar algunos ejemplos. Post unos 5-10 filas de cada tabla, explicar lo que debe ser lo, y eso sólo puede ser suficiente para nosotros para entender lo que usted está tratando de lograr.
InformationsquelleAutor happysmile | 2011-02-07

8 Comentarios

  1. 140

    Si las dos bases de datos se encuentran en el mismo servidor, usted debe ser capaz de crear una instrucción SQL algo como esto:

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

    De su post, no estoy muy claro si quieres actualización Test1.dbo.Employee con los valores de Test2.dbo.Employee (que es lo que mi consulta no), o de la otra manera (ya que mencionas a la base de datos de Test1 fue la nueva tabla……)

    • Sobresaliente!!! Simple, y funciona (salvo que me quita las citas de emp2). Muchas gracias!
    • Exactamente lo que estaba buscando. He hecho esto antes de usar subconsultas, pero yo sabía que tenía que haber una manera más sencilla. Solo quiero añadir que yo sólo quería actualizar un subconjunto de los registros de una tabla en función de los valores correspondientes en la otra tabla, la cual se puede hacer fácilmente mediante la adición de una condición a la DONDE de la cláusula, por ejemplo, WHERE Test1.dbo.Employee.EmployeeID = emp2.EmployeeID AND Test1.dbo.Employee.Department IN ('Sales','Marketing')
    • Pero, ¿qué vamos a hacer si ambas bases de datos están en otro servidor??
  2. 14
    update t2
    set t2.deptid = t1.deptid
    from test1 t1, test2 t2
    where t2.employeeid = t1.employeeid
    • La única diferencia aquí es que esta versión es el uso de un alias para t2.
    • Este gran trabajo. Por alguna razón, @marc_s respuesta no trabajo. Posiblemente a causa de comillas alrededor del nombre de alias?
  3. 1
    update test1 t1, test2 t2
    set t2.deptid = t1.deptid
    where t2.employeeid = t1.employeeid

    usted no puede usar de la palabra clave para la base de

  4. 0

    Trate de una consulta como

    INSERT INTO NEW_TABLENAME SELECT * FROM OLD_TABLENAME;
    • La pregunta estados diferentes bases de datos. No has tomado en cuenta. Además de la respuesta ya ha aceptado la respuesta en la que trabaja. Además de mirar el formato de la consulta. Eche un vistazo a este.
  5. 0

    esto funciona de maravillas – no su turno para llamar a este procedimiento código del formulario con el DataTable con el esquema coincide exactamente con la custType
    create table cliente
    (
    id int identity(1,1) primary key,
    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);
                    }
                }
    }
  6. -1
     UPDATE Employee SET Empid=emp3.empid 
     FROM EMP_Employee AS emp3
     WHERE Employee.Empid=emp3.empid
  7. -3

    uso test1

    insert into empleado(deptid) seleccione deptid de test2.dbo.empleado

    • La pregunta no es para insertar la nueva fila, PERO la actualización de tabla existente con otra tabla existente.

Dejar respuesta

Please enter your comment!
Please enter your name here