2011-02-07 17 views
45

Mam dwie tabele w różnych bazach danych na tym samym serwerze bazy danych.Jak zaktualizować dane w jednej tabeli z odpowiednich danych w innej tabeli w SQL Server 2005

Obie bazy danych mają tę samą strukturę, ale inne dane. Baza danych1 (Test1) jest najnowsza, a baza danych2 (Test2) jest starą kopią bazy danych.

  • Test1 ma tabelę o nazwie Employee z 3000 rekordów
  • Test2 znajduje się stół zwanych Employee z 1000 rekordów

muszę zaktualizować tabelę w Test1 z tej samej tabeli w Test2 na dany kolumna o nazwie DeptID, ponieważ wartości w tabeli Employee w Test2 DB (stara) zostały zaktualizowane. Dlatego muszę zaktualizować tabelę w nowym DB z tabeli w starym DB, który ma około 1000 wierszy.

Innymi słowy, muszę zaktualizować kolumnę w tabeli EmployeeDeptID w Test1 dB przy wartości co mam w kolumnie DeptID w tabeli Employee w Test2 DB.

Wiem, że mogę przywrócić samą DB, ale to nie jest rozwiązanie. Muszę zaktualizować wartości w bazie danych Test1 z bazy danych Test2.

+0

Czy chcesz po prostu zaktualizować wartości z obu tabel? czy chcesz, żeby te dwie tabele były identyczne? – Lamak

+0

Niestety, twoje pytanie nie jest jasne. Sądzę, że trudno ci jasno powiedzieć o swoim problemie w języku angielskim, ale nie rozpaczaj! Możesz pomóc, podając kilka przykładów.Opublikuj około 5-10 wierszy z każdej tabeli, wyjaśnij, co powinno stać się tym, co może być wystarczające, abyśmy mogli zrozumieć, co próbujesz osiągnąć. –

Odpowiedz

133

Jeśli dwie bazy danych są na tym samym serwerze, powinieneś być w stanie stworzyć instrukcji SQL coś takiego:

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

ze swojego postu, nie jestem całkiem jasne, czy chcesz do aktualizacjiTest1.dbo.Employee z wartościami z Test2.dbo.Employee (to co robi mój kwerendy), albo na odwrót (ponieważ wspomnieć db na Test1 był nowy stół ......)

+1

Znakomity !! Proste i działa (poza tym usunąłem cytaty z emp2). Dzięki wielkie! – Chiramisu

+2

Dokładnie tego, czego szukałem. Zrobiłem to przed użyciem podzapytań, ale wiedziałem, że musi być prostszy sposób. Chcę tylko dodać, że chcę tylko zaktualizować podzbiór rekordów w jednej tabeli na podstawie odpowiednich wartości w innej tabeli, co można łatwo zrobić, dodając warunek do klauzuli ** WHERE **, np. 'GDZIE Test1.dbo.Employee.EmployeeID = emp2.EmployeeID AND Test1.dbo.Employee.Department IN ('Sprzedaż', 'Marketing')' –

+1

Ale co zrobimy, jeśli obie bazy danych znajdują się na innym serwerze? – yash

13
update t2 
set t2.deptid = t1.deptid 
from test1 t1, test2 t2 
where t2.employeeid = t1.employeeid 
+1

Jedyna różnica polega na tym, że ta wersja używa aliasu dla t2. – Fandango68

+1

To działało świetnie. Z jakiegoś powodu odpowiedź @marc_s nie zadziałała. Być może z powodu cytatów wokół nazwy aliasu? –

-1
UPDATE Employee SET Empid=emp3.empid 
FROM EMP_Employee AS emp3 
WHERE Employee.Empid=emp3.empid 
1
update test1 t1, test2 t2 
set t2.deptid = t1.deptid 
where t2.employeeid = t1.employeeid 

nie można korzystać z hasła do mysql

-2

użytku test1

wstawić do pracownika (deptid) wybierz deptid z test2.dbo.employee

+0

Pytanie nie polega na wstawieniu nowego wiersza, ale aktualizacja istniejącej tabeli z inną istniejącą tabelą. – nanosoft

1

Spróbuj zapytać jak

INSERT INTO NEW_TABLENAME SELECT * FROM OLD_TABLENAME; 
+0

Pytanie dotyczy różnych baz danych. Nie wziąłeś tego pod uwagę. Plus odpowiedź już ma akceptowaną odpowiedź, która działa. Ponadto spójrz na formatowanie zapytania. Spójrz na [to] (http://stackoverflow.com/help/formatting). – Bugs

2
UPDATE table1 
SET column1 = (SELECT expression1 
       FROM table2 
       WHERE conditions) 
[WHERE conditions]; 
0

to działa cuda - nie ma swojej kolej, aby zadzwonić Kod ten formularz procedura z DataTable ze schematu dokładnie dopasowując custType create table klientowi (id int tożsamości (1,1) klucz podstawowy, nazwa 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); 
       } 
      } 
} 
Powiązane problemy