Как обновить данные в одной таблице из соответствующих данных в другой таблице в SQL Server 2005 - PullRequest
47 голосов
/ 07 февраля 2011

У меня две таблицы в разных базах данных на одном сервере баз данных.

Обе базы данных имеют одинаковую структуру, но разные данные. База данных 1 (Test1) является самой последней, а база данных 2 (Test2) является старой копией базы данных.

  • Test1 имеет таблицу с именем Employee с 3000 записями
  • Test2 имеет таблицу с именем Employee с 1000 записями

Мне нужно обновить таблицу в Test1 из той же таблицы в Test2 для определенного столбца с именем DeptID, поскольку значения в таблице Employee в базе данных Test2 (старой) были обновлены. Поэтому мне нужно обновить таблицу в новой БД из таблицы в старой БД, которая содержит около 1000 строк.

Другими словами, мне нужно обновить столбец DeptID в таблице Employee в базе данных Test1, используя те значения, которые есть в столбце DeptID в таблице Employee в Test2 DB.

Я знаю, что могу восстановить саму БД, но это не решение. Мне нужно обновить значения в базе данных Test1 из базы данных Test2.

Ответы [ 8 ]

139 голосов
/ 07 февраля 2011

Если две базы данных находятся на одном и том же сервере, вы сможете создать оператор SQL примерно так:

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

Из вашего поста мне не совсем понятно, хотите ли вы обновить Test1.dbo.Employee значениями от Test2.dbo.Employee (это то, что делает мой запрос) или наоборот (так как вы упомянули, что db на Test1 была новой таблицей ......)

14 голосов
/ 07 февраля 2011
update t2
set t2.deptid = t1.deptid
from test1 t1, test2 t2
where t2.employeeid = t1.employeeid
2 голосов
/ 14 ноября 2016
UPDATE table1
SET column1 = (SELECT expression1
               FROM table2
               WHERE conditions)
[WHERE conditions];
1 голос
/ 11 апреля 2016
update test1 t1, test2 t2
set t2.deptid = t1.deptid
where t2.employeeid = t1.employeeid

нельзя использовать из ключевого слова для mysql

0 голосов
/ 17 сентября 2017

это творит чудеса - нет своей очереди вызывать этот код формы процедуры с DataTable со схемой, точно совпадающей с клиентом создания таблицы custType (первичный ключ id int identity (1,1), имя 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);
                }
            }
}
0 голосов
/ 27 октября 2016

Попробуйте запрос как

INSERT INTO NEW_TABLENAME SELECT * FROM OLD_TABLENAME;
0 голосов
/ 10 августа 2016

использовать test1

вставить в сотрудника (deptid) выбрать deptid из test2.dbo.employee

0 голосов
/ 29 июня 2015
 UPDATE Employee SET Empid=emp3.empid 
 FROM EMP_Employee AS emp3
 WHERE Employee.Empid=emp3.empid
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...