Wiem, że zrobiłem to przed laty, ale nie pamiętam składni i nie mogę jej nigdzie znaleźć z powodu zebrania mnóstwa dokumentów pomocy i artykułów na temat „importu zbiorczego”.
Oto, co chcę zrobić, ale składnia jest nieprawidłowa ... proszę, ktoś, kto to zrobił wcześniej, pomóż mi :)
INSERT INTO dbo.MyTable (ID, Name)
VALUES (123, 'Timmy'),
(124, 'Jonny'),
(125, 'Sally')
Wiem, że jest to bliskie właściwej składni. Może potrzebuję tam słowa „DUŻO” lub czegoś, czego nie pamiętam. Dowolny pomysł?
Potrzebuję tego do bazy danych SQL Server 2005. Próbowałem tego kodu, ale bezskutecznie:
DECLARE @blah TABLE
(
ID INT NOT NULL PRIMARY KEY,
Name VARCHAR(100) NOT NULL
)
INSERT INTO @blah (ID, Name)
VALUES (123, 'Timmy')
VALUES (124, 'Jonny')
VALUES (125, 'Sally')
SELECT * FROM @blah
Dostaję Incorrect syntax near the keyword 'VALUES'.
sql-server
tsql
sql-server-2005
insert
Timothy Khouri
źródło
źródło
INSERT INTO @blah (ID, Name) VALUES (123, 'Timmy'), (124, 'Jonny'), (125, 'Sally')
wpisujesz „WARTOŚCI” pojawiają się tylko raz i potrzebujesz przecinków między zestawami.Odpowiedzi:
W przypadku SQL Server 2008 można to zrobić w jednej klauzuli VALUES dokładnie tak , jak w instrukcji w pytaniu (wystarczy dodać przecinek, aby oddzielić każdą instrukcję wartości) ...
źródło
INSERT table (columnlist)
select
możesz utworzyć zestaw z kolumnami i wierszami, a zgodnie z projektem rzędy te możnainsert
edytować w innej tabeli z taką samą ilością kolumn. Możesz nawet użyć kombinacji literałów i wartości. Na przykład użycieinsert
zselect 'A', ID from ATable
spowoduje wstawienie „A” w pierwszej kolumnie za każdym razem, a wartość kolumny ID odpowiedniego wiersza ATable w drugiej kolumnie.Twoja składnia prawie działa w SQL Server 2008 (ale nie w SQL Server 2005 1 ):
1 Po udzieleniu odpowiedzi na pytanie nie było oczywiste, że pytanie dotyczyło programu SQL Server 2005. Pozostawiam tę odpowiedź tutaj, ponieważ uważam, że jest ona nadal aktualna.
źródło
Jeśli Twoje dane są już w bazie danych, możesz:
Jeśli potrzebujesz na stałe zakodować dane, wówczas SQL 2008 i nowsze wersje pozwalają wykonać następujące czynności ...
źródło
Używając
INSERT INTO ... VALUES
składni jak w odpowiedzi Daniela Vassallo, istnieje jedno irytujące ograniczenie:Najprostszym sposobem na ominięcie tego ograniczenia jest użycie tabeli pochodnej, takiej jak:
LiveDemo
Działa to począwszy od SQL Server 2008+
źródło
C. Specifying multiple values as a derived table in a FROM clause
Możesz to zrobić (brzydkie, ale działa):
źródło
Osiągnie to, o co pytasz:
Dla przyszłych programistów możesz również wstawić z innej tabeli :
Lub nawet z wielu tabel :
źródło
Możesz użyć związku:
źródło
Wygląda to OK dla SQL Server 2008. W przypadku SS2005 i wcześniejszych należy powtórzyć instrukcję VALUES.
EDYCJA :: Mój zły. Musisz powtórzyć „INSERT INTO” dla każdego wiersza w SS2005.
źródło
Łatwiej byłoby używać XML w SQL Server do wstawiania wielu wierszy, w przeciwnym razie staje się to bardzo uciążliwe.
Zobacz pełny artykuł z objaśnieniami do kodu tutaj http://www.cyberminds.co.uk/blog/articles/how-to-insert-multiple-rows-in-sql-server.aspx
Skopiuj poniższy kod na serwer SQL, aby wyświetlić próbkę.
źródło
LUB MOŻESZ UŻYWAĆ INNEGO SPOSOBU
źródło
Korzystałem z następujących:
Dodaje dziesięć wierszy z unikalnymi identyfikatorami GUID dla identyfikatora i nazwy.
Uwaga: nie kończ ostatniego wiersza (GO 10) znakiem „;” ponieważ spowoduje to błąd: wystąpił krytyczny błąd skryptu. Napotkano niepoprawną składnię podczas analizowania GO.
źródło
Odpowiadając na INSERT (Transact-SQL) (SQL Server 2005) nie można go pominąć
INSERT INTO dbo.Blah
i trzeba go określać za każdym razem lub użyć innej składni / podejścia,źródło
Działa to bardzo szybko i wydajnie w SQL. Załóżmy, że masz stolik
Sample with 4 column a,b,c,d where a,b,d are int and c column is Varchar(50)
.Nie można wstawić wielu rekordów w tej tabeli przy użyciu następującego zapytania bez powtarzania instrukcji insert,
Również przy użyciu C #
SqlBulkCopy bulkcopy = new SqlBulkCopy(con)
Możesz wstawić 10 wierszy jednocześnie
źródło
We wstawce wielozadaniowej wstawiasz wiersze obliczone na podstawie wierszy zwróconych z oceny podzapytania do jednej lub więcej tabel.
Bezwarunkowe WSTAW WSZYSTKIE : - Aby dodać wiele wierszy do tabeli jednocześnie, użyj następującej formy instrukcji INSERT:
Podaj WSZYSTKIE, a następnie wiele klauzul insert_into_clauses, aby wykonać bezwarunkowe wstawianie wielozadaniowe. Baza danych Oracle wykonuje każdą klauzulę insert_into_clause jeden raz dla każdego wiersza zwróconego przez podzapytanie.
Zapytanie dotyczące wstawiania w jednym wierszu
źródło
Inni tutaj sugerowali kilka składni z wieloma rekordami. Wyjaśniając to, sugeruję, aby najpierw wstawić do tabeli tymczasowej, a następnie wstawić główny stół.
Powodem tego jest ładowanie danych z zapytania może potrwać dłużej, a może to spowodować zablokowanie tabeli lub stron dłużej niż jest to konieczne, co spowalnia inne zapytania działające względem tej tabeli.
Ponadto twoje identyfikatory powinny być prawdopodobnie tożsamością (1,1) i prawdopodobnie nie powinieneś ich wstawiać, w zdecydowanej większości przypadków. Pozwól, aby SQL zdecydował za Ciebie.
źródło