Weiß jemand, was ist die Grenze für die Anzahl der Werte, die man in einer Liste von Ausdrücken haben kann (um auf eine Übereinstimmung zu testen) für die IN-Klausel?"IN" Klausel Begrenzung in Sql Server
Antwort
Ja gespalten gibt es eine Grenze, aber MSDN only specifies that it lies "in the thousands":
Including an extremely large number of values (many thousands) in an IN clause can consume resources and return errors 8623 or 8632. To work around this problem, store the items in the IN list in a table.
auf diesem Fehler in Details Sehen, wir sehen, dass diese Grenze nicht spezifisch für IN
ist aber gilt Komplexität im Allgemeinen abfrage:
Error 8623:
The query processor ran out of internal resources and could not produce a query plan. This is a rare event and only expected for extremely complex queries or queries that reference a very large number of tables or partitions. Please simplify the query. If you believe you have received this message in error, contact Customer Support Services for more information.
Error 8632:
Internal error: An expression services limit has been reached. Please look for potentially complex expressions in your query, and try to simplify them.
Je nach verwendeter Datenbank-Engine kann die Länge einer Anweisung begrenzt sein.
SQL Server hat eine sehr große Grenze:
Maximum Capacity Specifications for SQL Server
Also, für IN-Klauseln groß, es ist besser, eine temporäre Tabelle zu erstellen, die Werte einfügen und machen Sie einen JOIN. Es funktioniert auch schneller.
Es gibt eine Grenze, aber Sie können Ihre Werte in separate Blöcke in()
Select *
From table
Where Col IN (123,123,222,....)
or Col IN (456,878,888,....)
verwenden, um einen Tabellenwertparameter im Jahr 2008 oder einen hier beschriebenen Ansatz
Es ist nicht spezifisch, sondern auf die Abfrage-Plan-Generator überschreiten Speichergrenzen zusammen. Ich kann bestätigen, dass mit mehreren tausend es oft Fehler, kann aber durch Einsetzen der Werte in eine Tabelle ersten und umformulieren als
select * from b where z in (select z from c)
die Abfrage aufgelöst werden, wenn die Werte in der Tabelle sind in c in Klausel wollen. Wir haben das erfolgreich mit einer In-Klausel von 1 Millionen Werten verwendet.
Je nachdem, wie Sie die Abfrage ausführen (JDBC, Hiberante, eine Art von SQL-GUI) und bei der Verwendung von Literalwerte anstelle einer Unterabfrage where X in (1, 2, 3...)
- Sie können auch die folgenden Fehler auftreten:
Too many parameters were provided in this RPC request. The maximum is 2100.
Also wäre die Grenze in diesen Fällen 2100 (oder sogar noch weniger, wenn andere Parameter vorhanden sind).
- 1. SQL Server OUTPUT-Klausel
- 2. OUTPUT-Klausel in SQL SERVER-Fehler
- 3. Bedingung in Where-Klausel - SQL Server
- 4. Switch Fall in Where-Klausel (SQL-Server)
- 5. Bedingte WHERE-Klausel in SQL Server
- 6. WHERE-Klausel in SQL Server "Text" Datentyp
- 7. SQL-Server Datetime in WHERE-Klausel Ausgabe
- 8. Begrenzung der NVARCHAR-Größe im SQL Server?
- 9. CASE-Anweisung in WHERE-Klausel in SQL (SQL Server)
- 10. SQL-Server: Dynamisches where-Klausel
- 11. SQL Server mit Klausel Ausgabe
- 12. SQL Server Datetime WHERE Klausel
- 13. Wie in alias Spaltennamen verwenden, wo Klausel in SQL Server
- 14. WHERE-Klausel in SQL
- 15. Where-Klausel in SQL-
- 16. Tupel in SQL-in-Klausel
- 17. SQL-Syntaxfehler in Where-Klausel
- 18. Sql Server DELETE und WITH-Klausel
- 19. SQL Begrenzung Count-Funktion auf Basis von IN-Klausel kommagetrennte Liste
- 20. Begrenzung der WHERE col IN (...) Zustand
- 21. case-Anweisung in having-Klausel in sql
- 22. Problem im Zusammenhang mit where-Klausel in SQL Server
- 23. SQL Server - mit der WITH-Klausel in einer INSERT-Anweisung
- 24. MS SQL Server Pivot-Tabelle mit Unterabfrage in Spalte Klausel
- 25. Parametrisierte WHERE-Klausel in SQL Server gespeicherte Prozedur
- 26. Wie bekomme ich LIKE-Klausel in ADO.NET und SQL Server
- 27. Wählen Sie Abfrage mit Like-Klausel in Sql-Server 2008
- 28. SQL Server 2008 - Case/If-Anweisungen in SELECT-Klausel
- 29. Where-Klausel wählen Sie nicht in SQL Server CE zählen
- 30. ORACLE Connect durch Klausel entspricht in SQL Server
http://msdn.microsoft.com/en-us/library/ms143432.aspx – xdazz
Sie sollten nie Code schreiben, der Sie irgendwo in der Nähe der Grenze bringt, weil in (aa, a2, ..., an) wird sehr ineffizient, wenn n groß wird - Sie sollten Ihre Abfrageauswahl über einen besseren Mechanismus steuern, wann immer es möglich ist, z die Entsprechung existiert Klausel –
ist es nur eine Interviewfrage ... weil ich nicht glaube, dass in der praktischen Welt Sie irgendeine Situation haben würden, in der Matchgruppe gefunden werden kann nahe zur Größe – Dhaval