Jak można szybko wstawić 300 rekordów do bazy zamiast każdy rekord wstawiać za pomocą insert into i wpisywać values do każdego rekordu? W ten sposób to z 30min to zajmie. Czy nie ma innego sposobu? Sporo w tych rekordów stringów, więc do sporej ilości danych trzeba dodać jeszcze apostrofy.
Ale masz gdzieś te dane spisane w sensie pliku, czy wklepujesz z głowy/kartki?
Jeżeli jest jakieś podobieństwo w wartościach i chcesz je wklepać z 'głowy', to najprościej będzie wykorzystać kursor.
Mam w pliku excelowym
Ew. Mając dane w formie zserializowanej (xml, jason lub inny freddy), mapować je na zmienne/obiekt, który je będzie reprezentować, potem zbindować i przelecieć pętlą albo po ludzku zrobić transakcję. Ale ciężko doradzić konkretny sposób nie znając Twoich możliwości i faktycznej sytuacji.
Pod SQL Management studio możesz po chamsku zaimportować z Excela rekordy, o ile dobrze pamiętam.
Ew. Przetworzyć ten arkusz w skrypcie, ale w Twoim przypadku, jeśli to jednorazowy przypadek, to najprościej to zrobić zewnętrznym narzędziem, jak SSME właśnie.
Do MSSQL Servera jest takie narzędzie SQL Server 2014 Import and Export Data. Przy pomocy tego narzędzia można zaimportować dane z zewnętrznych źródeł danych do bazy.
Już tego próbowałem i to od razu tworzy nową tabelkę przy importowaniu, więc niektóre dane dodaje nie poprawne i np potem nie mogę dodać klucza głównego.
A nie zapominasz ustawić w jednym z kroków mapowania na istniejącą tabelę?
Bo jeśli ustawiasz prawidłowo, to on Ci wrzuci te dane do odpowiedniej tabeli i nie będzie żadnych baletów wyczyniał. Sprawdź czy na pewno czegoś sobie nie kaszanisz :P
Wybrałem tabelkę na która chcę przemapować ale wyskakują same błędy np. przy typie decimal.
Sprawdź sobie czy na pewno typy Ci się zgadzają na tyle, że ma to sens.
Drugim rozwiązaniem, które jest ryzykowne, jest ustawienie warningów i błędów na "ignore". Jeśli jest to aplikacja, przy której nie możesz sobie pozwolić na utratę istniejących danych, niespójność lub inne problemy jak utrata precyzji itp., czyli w zasadzie jakąkolwiek aplikacja poza prywatnym projektem na studia/do szuflady, to pomysł jest niebezpieczny, chyba, że będziesz miał możliwość gruntownego przetestowania później wszystkich wartości w bazie pod kątem wymagań.
Zanim machniesz to z ignorem na błędach, podrzuć tutaj choćby cześć komunikatów, żebyśmy wiedzieli co i dlaczego się sypie.
To może być nieporadność importera przy konwertowaniu, ale może też być jakaś większa niespójność, która da Ci malowniczy fuckup.
Dałem wszystkie kolumny w tabelce na carchar(255) i nadal sypie błędami np. the value violated the integrity constraints for the column
Chodzi o to, że mi w excelu dane kolumny zapisuje jako typ VarChar (z dużych liter), a w bazie mam varchar i mam ustawione niby konwertowanie, ale widocznie jest coś nie tak z nim.
Dobra jak dodałem kolukmnę Id do excela to skopiowało, ale w niektórych kolumnach w bazie są teraz nulle mimo, że w excelu są podane wartości.
Narzędzie, które podałem trzeba wykorzystywać z głową tzn, wiedzieć jakie dane masz i gdzie mają trafić. Z Excela zrób sobie export do csv. Zobacz w pliku *.csv czy dane zgadzają się (np. poprawnie użyty znak kropki i przecinka w liczbach, apostrofy w tekstach itd.). Jeśli to będzie ok to import do bazy powinien się udać, zawsze możesz wypełnić nową tabelę w bazie bawić się w SELECT INTO.
Jeśli to ma być szybka i jednorazowa operacja to zastanowiłby mi się nad wygenerowaniem tych insertów za pomocą formuły i przeciągnięciu. I mówię serio. Czasem warto automatyzować z umiarem bo zajmuje to więcej czasu niż samo zadanie