2012-02-08 13 views
13

Jaka jest maksymalna długość instrukcji SQL w SQL Server? Czy ta długość zależy od wersji SQL Server?Ile znaków może mieć instrukcja SQL Server SQL?

Na przykład, w

DECLARE @SQLStatement NVARCHAR(MAX) = N'Something' 
EXEC(@SQLStatement) 

w @SQLStatement może być znaki x długi. Czym jest X?

+3

Tyle, ile potrzebujesz? – Dave

+2

To zależy od tego, co jest instrukcją SQL ... lub może nie rozumiem tego pytania. – abney317

+0

Zakładam maksymalną liczbę? Nie traktuj tego zbyt poważnie ... –

Odpowiedz

13

To będzie 65,536 razy swój rozmiar pakietu sieciowego, zgodnie the documentation

Wygląda to ten sam co najmniej od SQL Server 2005

+2

A ludzie odrzucili pytanie, myśląc, że to głupie, a wtedy Microsoft nie narzucałby limitu długości dla instrukcji SQL. HA. Dobre pytanie Sohell Farahany. –

+2

@Evan - tak, pytanie nie było całkowicie jasne, więc myślę, że większość ludzi nie rozumiała, że ​​pyta o maksymalną wielkość zapytania (przynajmniej o to mi chodzi) –

+0

dziękuję wam za zrozumienie mój Q. –

1

Długość instrukcji SQL powinny być jako jak najkrótsza przy jednoczesnym zachowaniu ludzkiej zrozumiałości.

Ponieważ parsowanie i kompilacja instrukcji SQL do rzeczywistego zadania dla silnika bazy danych jest bardzo szybkie, długość instrukcji nie ma większego znaczenia dla analizatora składni. O wiele ważniejsze, zwłaszcza dla ręcznego skonstruowania instrukcji SQL, jest to, że człowiek może zachować to stwierdzenie w przyszłości.

+0

Dobra odpowiedź, ale wygląda na to, że OP miał problem z barierą językową i miał na celu zapytać, jaka jest długość łańcucha SQL. Zaktualizowałem to pytanie, aby to odzwierciedlić, przepraszam za to, że zwariowałeś. – Pops

+1

To jest fałszywe oświadczenie. Istnieje wiele przypadków użycia dla zapytań generowanych dynamicznie. "ludzka zrozumiałość" jest dość subiektywna, ale możemy założyć, że to, co masz na myśli, jest zrozumiane za kilka minut lub krócej, co znowu nie jest konieczne. Myślę, że twój komentarz prawdopodobnie bierze pod uwagę tylko statyczne lub prawie statyczne zapytania. Utrzymanie jest zawsze dobrym rozwiązaniem, ale należy wziąć pod uwagę więcej kontekstów. – Nick

3

Jeśli twoja zmienna jest zdefiniowana jako NVARCHAR(MAX), może mieć rozmiar 2 GB (pamiętaj, że NVARCHAR używa dwóch bajtów dla każdego znaku i kompresji na bok). Jeśli jednak zbliżasz się do tej wielkości, długość twojego zapytania SQL jest prawdopodobnie najmniejszym z twoich zmartwień.

+0

Nie, nie, nie, wiedziałem, że NVARCHAR (MAX) to 2 GB. Miałem na myśli kompilator sql, nie ma problemu z uruchomieniem instrukcji 2GB? –

+0

Spróbowałeś? Ponownie, jeśli twoje zapytanie SQL zbliża się do tego rozmiaru, IMHO ma większe problemy. –

+0

-> tak, masz rację. –

4

Verbatim z the documentation:

65.536 * Network Packet Size

Co nie jest jasne, ale które każdy rozsądny człowiek natychmiast pytanie, co to jest "Network Packet Size" oznacza?

Rozmiar pakietu sieciowego, w tym przypadku, zgodnie z oczekiwaniami, nie oznacza, że ​​ odnosi się do rozmiaru fizycznego, ponieważ mogłoby to zerwać abstrakcyjny protokół przesyłania strumieniowego gwarantowanej dostawy (TCP), ale odnosi się do rozmiaru pakietu w kontekście protokołu Tabular Data Stream używanego przez SQL Server do komunikacji. Zgodnie z tą samą dokumentacją domyślny rozmiar pakietu TDS to 4KB.

+0

65 536 * 4096 = 268 445 456 bajtów (jeśli ktokolwiek chciał mieć rzeczywistą liczbę) –