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
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