2008-10-09 769 views

Odpowiedz

187

Na serwerze SQL? i na tym samym serwerze bazy danych? Użyj nazw trzech części.

INSERT INTO bar..tblFoobar(*fieldlist*) 
SELECT *fieldlist* FROM foo..tblFoobar 

Po prostu przesuwa dane. Jeśli chcesz przenieść definicję tabeli (i inne atrybuty, takie jak uprawnienia i indeksy), musisz zrobić coś innego.

+0

Będziesz musiał również osobno ustawić uprawnienia stołowy, wierzę. –

+0

Tak, i indeksy ... itd. –

+1

Jeśli potrzebujesz również wstawiania tożsamości, Kreator importu danych ma do tego opcję ^^ - odnosząc się do drugiej odpowiedzi –

90

To powinno działać:

SELECT * 
INTO DestinationDB..MyDestinationTable 
FROM SourceDB..MySourceTable 

Będzie nie constaints kopiowania, domyślne lub indeksy. Utworzona tabela będzie miała indeks klastrowany , a nie.

Alternatywnie możesz:

INSERT INTO DestinationDB..MyDestinationTable 
SELECT * FROM SourceDB..MySourceTable 

Jeśli tabela docelowa istnieje i jest pusty.

+0

Czy jest jakiś problem, jeśli najpierw skopiujesz strukturę tabeli podstawowej (pola i dane), a następnie zastosujesz skrypt * patch *, aby utworzyć uprawnienia, indeksy, ograniczenia i rozszerzone właściwości? – leoinfo

+3

To nie spowoduje wstawienia wartości dla kolumn tożsamości w programie SQL Server 2008. Jest to dozwolone tylko w przypadku korzystania z listy kolumn i IDENTITY_INSERT jest WŁĄCZONE dla tabeli docelowej. –

+0

@Lucas - Jesteś "w połowie" w porządku :). Jednak pierwsza instrukcja SQL kopiuje WSZYSTKIE dane, w tym wartości w kolumnach tożsamości. Jak już powiedziałem, ograniczenia nie są tworzone. Ale mogą być łatwo zapisane w źródłowym DB i zastosowane do docelowego DB po przeniesieniu wszystkich danych. – leoinfo

22
  1. Skrypt create table w studio zarządzania, uruchom ten skrypt na pasku, aby utworzyć tabelę. (Kliknij prawym przyciskiem myszy tabelę w Eksploratorze obiektów tabelę skryptu jak stworzyć do ...)

  2. INSERT bar.[schema].table SELECT * FROM foo.[schema].table

+1

Podoba mi się to podejście. Wybierz * nie będzie działać, jeśli istnieje kolumna tożsamości, musisz jawnie wymieniać nazwy kolumn. W takim przypadku musisz również wykonać polecenie "SET IDENTITY_INSERT TblName ON". – JeremyWeir

520

SQL Server Management Studio w "Importuj dane" zadanie (kliknij prawym przyciskiem myszy na nazwę DB, a następnie zadania) zrobi to za ciebie. Uruchom go z bazy danych, do której chcesz skopiować dane.

Jeśli tabele nie istnieją, utworzą je dla Ciebie, ale prawdopodobnie będziesz musiał ponownie utworzyć indeksy i inne. Jeśli tabele istnieją, domyślnie będą one dołączały nowe dane, ale możesz je dostosować (edytować mapowania), aby usunąć wszystkie istniejące dane.

Używam tego cały czas i działa całkiem dobrze.

+1

Nie mogę znaleźć tej opcji. czy jest tu coś konkretnego? – Nerrve

+2

wydaje się być dostępna tylko w wydaniu z roku 2008 – Nerrve

+32

Nie można powiedzieć, że ogólnie jest to lepsza odpowiedź. Nie nadaje się do automatyzacji na przykład z poziomu skryptu. BTW autor zapytał konkretnie o "..SQL statement ..". Ale oczywiście jest to świetna odpowiedź, ale nie lepsza;). – grizzly

15

Można również użyć Generate SQL Server Scripts Wizard aby pomóc utworzenie SQL skryptu, który może wykonać następujące czynności:

  • skopiowanie schematu tabeli
  • żadnych ograniczeń (tożsamość, wartości domyślne, itp)
  • dane w tabeli
  • i wiele innych opcji w razie potrzeby

Dobry przykładowy proces roboczy dla SQL Server 2008 z zrzutami ekranu pokazanymi here.

+0

Zobacz moje komentarze powyżej: "Jak to się stało, że otrzymałem 508/171 głosów i Ryana" 11 października "o 23:41" Odpowiedź dostaniesz tylko 13 do tej pory?!? Ryan's to jedyna odpowiedź * ta odpowiedź jest opowa q * całkowicie *. * Ponieważ * obsługuje te scenariusze (które, btw, OP NIE wykluczał z jego q.): a) Tożsamość (* bardzo * często), b) Ograniczenia, c) Wyzwalacze, d) Indeksy, e) Uprawnienia, d) kopiowanie schematu i danych (Podpowiedź: "i wszystkie" części op "(dane i wszystkie)" implikuje również Schemat.) i e) generuje "instrukcje SQL", które określają op, które nawet jeśli nie miał na myśli tego dosłownie, lepiej mieć niż nie ". – Tom

+0

Uwaga: Ta odpowiedź jest przydatna tylko wtedy, gdy liczba wierszy nie jest "nadmierna" (tzn. Tabele wyszukiwania/małych transakcji) i nie ma wartości "dużych" kolumn. W tym celu użyłbym odpowiedzi Ryana tylko po to, by wygenerować Skrypt dla Tabeli (w tym atrybuty kolumn i podobiekty), a następnie użyć odpowiedzi Davida B "Wstaw do wyboru". W przypadku pojedynczych tabel (zamiast A) można również użyć SSMS, Eksploratora obiektów, Tabeli prawego kliknięcia, Tabeli skryptów jako CREATE To, ale musisz najpierw upewnić się, że Narzędzia, Opcje, Eksplorator obiektów SQL Server, Skrypty są ustawić według życzenia. – Tom

8

Możesz iść z tym sposób: (ogólny przykład)

insert into QualityAssuranceDB.dbo.Customers (columnA, ColumnB) 
Select columnA, columnB from DeveloperDB.dbo.Customers 

Także jeśli trzeba wygenerować nazwy kolumn, jak również do wprowadzenia klauzuli INSERT, zastosowanie:

select (name + ',') as TableColumns from sys.columns 
where object_id = object_id('YourTableName') 

Copy wynik i wklej do okna zapytania, aby reprezentować 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ł, a 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 oba bloki DB są na tym samym serwerze.

44

Jeśli jest to jeden stół tylko wtedy wszystko, co trzeba zrobić, to

  • definicji tabeli Script
  • Tworzenie nowej tabeli w innej bazie danych
  • zasady aktualizacji, indeksy, uprawnienia i takie
  • Import danych (kilka przykładów wstawiono do przykładów powyżej)

Jedną z rzeczy, którą należy wziąć pod uwagę, jest inne er aktualizacje, takie jak migracja innych obiektów w przyszłości. Zwróć uwagę, że Twoje tabele źródłowe i docelowe nie mają tej samej nazwy. Oznacza to, że będziesz także musiał wprowadzić zmiany, jeśli jesteś zależny od obiektów, takich jak widoki, procedury składowane i inne.

Wybierz jeden lub kilka obiektów, które możesz ręcznie pominąć. Jednakże, gdy jest więcej niż kilka aktualizacji, narzędzia porównawcze firm trzecich są bardzo przydatne. Obecnie używam ApexSQL Diff do migracji schematów, ale nie możesz się pomylić z żadnym innym narzędziem.

0

Kopiowanie danych

INSERT INTO Alfestonline..url_details(url,[status],recycle) 
SELECT url,status,recycle FROM AlfestonlineOld..url_details 
1

Jeśli jest istniejący stół i chce skopiować tylko dane, możemy spróbować tej kwerendy.

wkładka do Destination_Existing_Tbl wybierz col1, col2 FROM Source_Tbl