429 "Die Anfrage bindet zu viele Einzelwerte."
Zahteva za branje z dolgim pogojem je zavrnjena z 429 (sporočilo: zahteva veže preveč posameznih
vrednosti), preden doseže podatkovno zbirko.
Okolje
Pogoji z veliko vrednostmi, na primer IN (…) iz Accessa prek gonilnika ali dolge verige pogojev z
or.
Vzrok
SQL Server v parametriziranem stavku sprejme največ 2.100 parametrov (Microsoft:
Maximum capacity specifications for SQL Server,
„Parameters per stored procedure“); dva od njih zasede sp_executesql, prek katerega prehod pošlje vsak
stavek. Za vrednosti klicatelja jih ostane 2.098. Prehod parametre prešteje vnaprej in zahtevo zavrne, namesto da bi
pogoj skrajšal. Odgovor je 429 (meja presežena), tako kot pri drugih količinskih mejah prehoda, in
ne 400: zahteva je veljavna, le presega zmogljivost enega stavka. Več kot 100 enakosti nad
istim stolpcem v enem or prehod združi v en sam parameter; pri vsem drugem
(veliko različnih stolpcev, primerjave z gt ali lt, iskanje po besedilu, kratke verige nad
veliko stolpci) šteje vsaka vrednost posebej.
Odprava
- Pogoj oblikujte kot seznam vrednosti enega stolpca (
Nummer eq 1 or Nummer eq 2 …oz.IN (…)); tedaj ga omejuje le še velikost telesa zahteve (MaxBodyBytes, privzeto 1 MB, kar je približno 36.000 kratkih številskih vrednosti). - Pogoj nad veliko različnimi stolpci razdelite na več zahtev.
- Dolge pogoje pošljite v telesu (
POST …/$query); gonilnik to stori sam.
Preverjanje
Zahteva odgovori 200 z enakim številom vrstic kot isti pogoj v podatkovni zbirki.