2011-07-13 16 views
5

Zastanawiam się, czy istnieje ograniczenie liczby instrukcji UNION w SELECT, które mogę wysłać do serwera SQL? Mogę mieć do 36 zrobionych w jednym zapytaniu SQL, więc staje się dość długi, ma charakter mądry. (Również każdy z tych SELECT jest nieco skomplikowana sama w przypadku, gdy oświadczenia w niej.)Serwer SQL: Jaki jest limit liczby UNION?

+0

Która wersja SQL proszę? –

Odpowiedz

12

Od SQL 2008 BOL

„Każda liczba operatorów Unia może pojawić się w instrukcji Transact-SQL”

również z MSDN "Maksymalna pojemność dla specyfikacji SQL Server" (2008):

wielkość partii (1)65.536 * Network Packet Size

Długość łańcucha znaków zawierającego SQL (wielkość partii) (1)65.536 * rozmiar pakietu sieciowego

(1) Network Packet Size jest wielkość strumienia danych tabelarycznych (TDS) Pakiety wykorzystywane do komunikować się między aplikacjami a relacyjnym aparatem bazy danych. Domyślny rozmiar pakietu to 4 KB i jest kontrolowany przez opcję konfiguracji rozmiaru pakietu sieciowego.

Według mnie oznacza to 268.445.456 bajtów przy użyciu wartości domyślnych. Proszę powiedzieć, że zapytanie jest krótsze.

+0

+1, ale link też byłby niezły ... – gbn

+0

@gbn - dodano link. –

+0

[Edytuj] Hej, na marginesie.Czy istnieje ograniczenie długości samej instrukcji SQL? – ahmd0

2

Zgodnie z tym post gdzieś pomiędzy 8000 a 16000, dla danego zapytania. Prawdopodobnie jest w większości przejęty przez zasoby dostępne dla twojego Serwera SQL.

Warto byłoby zadać kolejne pytanie o konkretny przypadek dotyczący alternatywnej metody, która nie wymaga tak wielu związków.

+1

+1 Dobry punkt. Podejrzewam, że jeśli musisz zrobić wiele UNION, to jest coś nie tak z twoją strukturą danych lub zapytaniem. –

+0

Czy 36 jest za dużo? – ahmd0

+0

To jest trochę, prawdopodobnie oznacza, że ​​istnieje lepszy sposób robienia tego, co jest. Zależy od okoliczności, ale warto ją zadawać (lub szukać poprzednich pytań). –

3

Nekromanty, ponieważ znam teraz prawdziwą odpowiedź.

Technicznie, jak powiedział Neil Moss,> 268 milionów bajtów (znaki ASCII) lub> 134 milionów znaków UTF-16.

Istnieje jednak limit "256 tabel na instrukcję SELECT".

I choć można użyć więcej niż 256 tabel w zapytaniu z oświadczeniami UNII, takiego zapytania nie może być używany jako widok, funkcja wycenione tabela lub jako podzapytania dla SELECT.

Ponadto, jeśli użyjesz takiego zapytania bezpośrednio, możesz osiągnąć limit miejsca na stosie optymalizatora zapytań na około 1'300-1'500 SELECT.

Wiem, ponieważ dzięki świetnemu (ostrzeżenie - sarkazm) OCP (pierwotny kod "programista") mamy taki schemat * ed i faktycznie wpadłem na oba, 256 i 1'300- Limit 1'500.

(jeden stół od rodzaju obiektu, w przypadku ktoś zastanawia się, z dokładnie tej samej kolumnie schematu (ale nie nazwy) na stole - zamiast tabeli referencyjnej z obiektem typu ...)