Próbuję wybrać niektóre pola z jednej tabeli i wstawić je do istniejącej tabeli z procedury składowanej. Oto, co próbuję:
SELECT col1, col2
INTO dbo.TableTwo
FROM dbo.TableOne
WHERE col3 LIKE @search_key
Myślę, że SELECT ... INTO ...
dotyczy tabel tymczasowych i dlatego pojawia się błąd, który dbo.TableTwo
już istnieje.
Jak mogę wstawić wiele wierszy dbo.TableOne
do dbo.TableTwo
?
sql
sql-server
tsql
stored-procedures
Daniel
źródło
źródło
Odpowiedzi:
SELECT ... INTO ...
działa tylko wtedy, gdy tabela określona w klauzuli INTO nie istnieje - w przeciwnym razie musisz użyć:Zakłada się, że w dbo są tylko dwie kolumny. TABLETWO - w przeciwnym razie musisz określić kolumny:
źródło
SELECT... INTO...
instrukcja wydaje się nie działać, jeśli tabela określona wINTO
klauzuli jeszcze nie istnieje. Pojawia się błąd „niezadeklarowanej zmiennej”. Chociaż może ten problem dotyczy tylko MySQL.CREATE TABLE ... LIKE .. worked
;Istnieją dwa różne sposoby implementacji wstawiania danych z jednej tabeli do drugiej.
Dla istniejącej tabeli - WPROWADŹ DO WYBORU
Ta metoda jest stosowana, gdy tabela jest już wcześniej utworzona w bazie danych, a dane mają zostać wstawione do tej tabeli z innej tabeli. Jeśli kolumny wymienione w klauzuli insert i select są takie same, nie trzeba ich wymieniać. Dobrą praktyką jest zawsze umieszczanie ich na liście w celu zapewnienia czytelności i skalowalności.
Dla tabeli nieistniejącej - WYBIERZ
Ta metoda jest używana, gdy tabela nie jest tworzona wcześniej i musi zostać utworzona, gdy dane z jednej tabeli mają zostać wstawione do nowo utworzonej tabeli z innej tabeli. Nowa tabela jest tworzona z tymi samymi typami danych, co wybrane kolumny.
Ref 1 2
źródło
To działałoby, jak podano poniżej:
źródło
SELECT *
nie zadziała. To lepszy sposób, dzięki!Jeśli używałeś
select * into tablename from other tablenames
już, następnym razem, aby dołączyć, mówiszselect * into existing table tablename from other tablenames
źródło
Jeśli tabela docelowa istnieje, ale nie chcesz określać nazw kolumn:
źródło