Mam tabelę, która przechowuje dynamicznie konstruowane zapytania T SQL w jednej z kolumn tabeli. Moim wymaganiem jest to, że muszę wykonać utworzone zapytanie (w moim przypadku niektóre instrukcje wstawiania) i I 'nie chcę używać pętli while' do przechodzenia przez całe wiersze, a następnie wykonywania instrukcji ze zmiennej. Również Nie chcę używać kursora. Tabela zawiera około 5 milionów dynamicznie formułowanych instrukcji wstawiania instrukcji SQL. Wcześniej próbowałem tego przy użyciu pętli while, ale ukończenie trwało kilka dni, więc upuściłem go.Wykonaj dynamiczną instrukcję SQL przechowywaną w kolumnie tabeli
Odpowiedz
Gdyby patrzeć co `lakh” było :)
Jak wspomniano inne komentarze nie jest to najbardziej optymalne podejście do DML, należy rozważyć refaktoryzacji. Jak to można połączyć dynamicznego SQL w partiach, np .:
DECLARE @sSQL nvarchar(max)
SET @sSQL = 'BEGIN TRAN; '
SELECT @sSQL = @sSQL + COLUMN_WITH_INSERT_STATEMENT + '; '
FROM TABLE
WHERE [limit number of rows]
SET @sSQL = @sSQL + 'COMMIT TRAN '
EXEC(@sSQL)
W ten sposób można połączyć kontrolowaną ilość INSERT w ramach jednej transakcji. Możesz kontrolować liczbę insertów za pomocą instrukcji WHERE (np. WHERE ID BETWEEN 1 and 100
, aby wykonać 100 INSERTów na raz) Możesz zapętlić ten warunek (pętla yes, ale nie będzie pętli przez poszczególne wiersze, ale przez warunki zamiast eg1 - 100, 101 - 200, 201 - 300 itd.).
Dziękuję za odpowiedź. Próbowałem również tej metody. Głównym problemem, jaki mi się zdarzył, była niespójność limitu varchar (max), gdy testowałem go na różnych komputerach. Może coś związanego z kodowaniem znaków. – Dibin
Nvarchar (max) limit id 2Gb, technicznie powinno wystarczyć. W jaki sposób możesz próbować uruchamiać oświadczenia w tym samym czasie? –
Możesz połączyć się w swoim exec, aby wyjść poza maksimum. 'exec (@ sSQL + @ sSQL1 + @ sSQL2)' – SQLMason
- 1. Wykonaj procedurę przechowywaną w innej procedurze przechowywanej na serwerze SQL
- 2. Wykonaj procedurę przechowywaną z wartościami tabeli jako parametr
- 3. Wykonaj procedurę przechowywaną z pliku wsadowego
- 4. SQL - jeśli ciąg w kolumnie z jednej tabeli zawiera ciąg w kolumnie z połączonej tabeli
- 5. Jak uzyskać ograniczeń na kolumnie tabeli SQL
- 6. Jak uzyskać Oracle utworzyć instrukcję tabeli w SQL * Plus
- 7. znaleźć nazwę tabeli sql z danej kolumnie
- 8. Python MySQLdb Wykonaj zmienną tabeli
- 9. Wykonaj mnożenie w SQL
- 10. SQL Dołącz na kolumnie jak inny kolumnie
- 11. Zastąp część łańcucha w kolumnie tabeli mysql
- 12. Znajdź wartość max w kolumnie tabeli
- 13. Zwróć wartość logiczną na SQL Wybierz instrukcję
- 14. SQL Server Wykonaj personifikacji
- 15. SQL- Dodaj wartości w kolumnie
- 16. SQL, jeśli instrukcja select nie zwraca żadnych wierszy, a następnie wykonaj alternatywną instrukcję select
- 17. Wykonaj wsteczną wstecz wszystkie nazwy tabeli/kolumny
- 18. dane Włóż w tabeli za pomocą XML i procedurę przechowywaną w programie SQL Server 2008
- 19. SQL - Jak znaleźć najwyższy numer w kolumnie?
- 20. ng-powtórzenie na kolumnie tabeli
- 21. Sortowanie tabeli Sql przy użyciu kolumny alias
- 22. jak wywołać procedurę przechowywaną, gdzie klauzula SQL
- 23. Zaznaczanie tekstu w kolumnie tabeli html
- 24. Wykonaj kwerendę sql z Elixir
- 25. Wstaw pusty ciąg w kolumnie INT dla SQL Server
- 26. SQL - Usunąć podsłowo z tekstem kolumnie za
- 27. React.js tworzenie tabeli z dynamiczną ilością wierszy z edytowalną kolumną
- 28. Błędy przy użyciu Maven Mojo sql: wykonaj
- 29. Znajdź duplikaty w kolumnie Oracle SQL
- 30. Szyfrowanie danych w kolumnie SQL Server
Wykonanie 5 milionów instrukcji 'INSERT' zajmie trochę czasu. Czy podejście oparte na zestawie nie jest możliwe? –
Masz okropny projekt modelu danych i przemyślane rozwiązanie problemu. – SQLMason
Pokaż nam przykłady tych danych. Jest to bardzo zły projekt i niezwykle trudny do rozwiązania w sposób, który dobrze się sprawdza. Waszą największą nadzieją jest to, że większość tych danych można zredukować do czegoś bardziej relacyjnego. – RBarryYoung