Mam bazę danych o nazwie foo i bazę danych o nazwie bar. Mam tabelę w foo o nazwie tblFoobar, którą chcę przenieść (dane i wszystkie) do paska bazy danych z bazy danych foo. Jaka jest do tego instrukcja SQL?
Mam bazę danych o nazwie foo i bazę danych o nazwie bar. Mam tabelę w foo o nazwie tblFoobar, którą chcę przenieść (dane i wszystkie) do paska bazy danych z bazy danych foo. Jaka jest do tego instrukcja SQL?
Odpowiedzi:
Na SQL Server? i na tym samym serwerze bazy danych? Użyj trzech części nazewnictwa.
INSERT INTO bar..tblFoobar( *fieldlist* )
SELECT *fieldlist* FROM foo..tblFoobar
To po prostu przenosi dane. Jeśli chcesz przenieść definicję tabeli (i inne atrybuty, takie jak uprawnienia i indeksy), musisz zrobić coś innego.
Zadanie „Import danych” programu SQL Server Management Studio (kliknij prawym przyciskiem myszy nazwę DB, a następnie zadania) wykona większość z Ciebie. Uruchom go z bazy danych, do której chcesz skopiować dane.
Jeśli tabele nie istnieją, utworzy je dla Ciebie, ale prawdopodobnie będziesz musiał odtworzyć wszelkie indeksy i tym podobne. Jeśli tabele istnieją, domyślnie dołączą nowe dane, ale można je dostosować (edytować odwzorowania), aby usunąć wszystkie istniejące dane.
Używam tego cały czas i działa całkiem dobrze.
WHERE
warunek za pomocą zadania Importuj dane? Nie mogłem znaleźć sposobu, aby to zrobić.
To powinno działać:
SELECT *
INTO DestinationDB..MyDestinationTable
FROM SourceDB..MySourceTable
To będzie nie skopiować constaints, domyślnie lub indeksów. Utworzona tabela nie będzie miała indeksu klastrowego.
Alternatywnie możesz:
INSERT INTO DestinationDB..MyDestinationTable
SELECT * FROM SourceDB..MySourceTable
Jeśli tabela docelowa istnieje i jest pusta.
INSERT INTO...
) działała dla mnie w Oracle.
Jeśli jest tylko jeden stół, wszystko, co musisz zrobić, to
Jedną rzeczą, którą musisz wziąć pod uwagę, są inne aktualizacje, takie jak migracja innych obiektów w przyszłości. Pamiętaj, że tabele źródłowa i docelowa nie mają tej samej nazwy. Oznacza to, że będziesz musiał również wprowadzić zmiany, jeśli zależne obiekty, takie jak widoki, procedury składowane i inne.
Z jednym lub kilkoma obiektami możesz przejść ręcznie bez żadnych problemów. Jednak gdy jest więcej niż kilka aktualizacji, narzędzia do porównywania innych firm są bardzo przydatne. Obecnie używam ApexSQL Diff do migracji schematów, ale nie można pomylić się z żadnym innym narzędziem.
Skrypt create table
w studio zarządzania, uruchom ten skrypt na pasku, aby utworzyć tabelę. (Tabela prawym przyciskiem myszy w eksploratorze obiektów, tabela skryptów jako, utwórz do ...)
INSERT bar.[schema].table SELECT * FROM foo.[schema].table
SET IDENTITY_INSERT TblName ON
takim przypadku musisz także zrobić .
Możesz także użyć Kreatora generowania skryptów SQL Server, aby pomóc w tworzeniu skryptów SQL, które mogą wykonywać następujące czynności:
Dobrym przykładem Workflow dla SQL Server 2008 ze zrzutami ekranowymi pokazanych tutaj .
Możesz przejść w ten sposób: (ogólny przykład)
insert into QualityAssuranceDB.dbo.Customers (columnA, ColumnB)
Select columnA, columnB from DeveloperDB.dbo.Customers
Również jeśli chcesz wygenerować nazwy kolumn, aby wstawić klauzulę wstawiania, użyj:
select (name + ',') as TableColumns from sys.columns
where object_id = object_id('YourTableName')
Skopiuj wynik i wklej do okna zapytania, aby przedstawić nazwy kolumn tabeli, a nawet to wykluczy również kolumnę tożsamości:
select (name + ',') as TableColumns from sys.columns
where object_id = object_id('YourTableName') and is_identity = 0
Pamiętaj, że skrypt do kopiowania wierszy będzie działał, jeśli bazy danych należą do tej samej lokalizacji.
Możesz tego spróbować.
select * into <Destination_table> from <Servername>.<DatabaseName>.dbo.<sourceTable>
Nazwa serwera jest opcjonalna, jeśli obie bazy danych znajdują się na tym samym serwerze.
Kopiuj dane
INSERT INTO Alfestonline..url_details(url,[status],recycle)
SELECT url,status,recycle FROM AlfestonlineOld..url_details