15. November 2011 02:07
SELECT TOP 1 "timestamp","No_", weitere Felder...,DATALENGTH("Picture") FROM "Dynamics NAV"."dbo"."Mandant AG$Item" WITH (READUNCOMMITTED) WHERE (("Old Catalog No_"=@P1)) AND (("No_"<>@P2)) ORDER BY "Old Catalog No_","No_" OPTION (OPTIMIZE FOR UNKNOWN)
15. November 2011 09:39
15. November 2011 09:52
Schau mal was passiert wenn du DATALENGTH("Picture") weglässt.
15. November 2011 10:26
15. November 2011 11:16
ich weiss nicht ob es was bedeutet, aber der Schlüssel den du als vorhanden angibst, ist "Catalog No_", in der Abfrage wird "Old Catalog No_" verwendet.
Item.RESET;
Item.SETCURRENTKEY("Old Catalog No.");
Item.SETRANGE("Old Catalog No.", GroesseNr);
IF Item.FINDFIRST THEN BEGIN
EXIT(TRUE);
END;
15. November 2011 11:27
ich weiss nicht ob es was bedeutet, aber der Schlüssel den du als vorhanden angibst, ist "Catalog No_", in der Abfrage wird "Old Catalog No_" verwendet.
Das sehe ich nicht. Wo meinst Du?
Es gibt einen Index, der die beiden Felder Catalog No_ und No_ beinhaltet.
15. November 2011 11:34
Du schreibst:
Es gibt einen Index, der die beiden Felder Catalog No_ und No_ beinhaltet.
15. November 2011 11:44
Ich dachte, SetCurrentKey und Findfirst sei schon das schnellste mit Ausnahme von IsEmpty. Nicht???????
15. November 2011 11:47
15. November 2011 11:49
Trotzdem muss er mindestens einen READ machen, um den Datensatz zu laden
15. November 2011 11:58
Was du aber beachten solltest. Nur weil du in NAV ein SETCURRENTKEY machst, heißt das nicht, dass der SQL-Server den von dir erwarteten Index verwendet.
Du hast ja auch einen Filter auf das Feld "Nr." gesetzt und da der SQL-Server selber entscheidet,
welcher Index verwendet wird, könnte es auch sein, dass der Primärschlüssel verwendet wird und danch dann entsprechend deines SETCURRENTKEY sortiert wird.
15. November 2011 12:06
15. November 2011 12:08
welcher Index verwendet wird, könnte es auch sein, dass der Primärschlüssel verwendet wird und danch dann entsprechend deines SETCURRENTKEY sortiert wird.
Das ist genau so. Er verwendet "Mandant AG$Item$0", also den PrimaryKey.
15. November 2011 12:38
15. November 2011 12:43
15. November 2011 12:52
Item2.RESET;
Item2.SETCURRENTKEY("Catalog No.");
Item2.SETRANGE("Catalog No.", GroesseNr);
Item2.SETFILTER("No.", '<>%1', "Item No. NAV");
IF Item2.FINDFIRST THEN BEGIN
15. November 2011 12:58
15. November 2011 13:04
Puh, und ich hatte mich beim Mitlesen die ganze Zeit gewundert, wie der zuerst von dir genannte Code das AND (("No_"<>@P2)) hätte verursachen sollen ...
15. November 2011 14:34
martinst hat geschrieben:Dieser Code ist der Übeltäter.
- Code:
Item2.RESET;
Item2.SETCURRENTKEY("Catalog No.");
Item2.SETRANGE("Catalog No.", GroesseNr);
Item2.SETFILTER("No.", '<>%1', "Item No. NAV");
IF Item2.FINDFIRST THEN BEGIN
[/Klugscheiß-Modus]Tim hat geschrieben:Also dein oben geposteter Code ist schon grundsätzlich OK. Allerdings passt der ja nicht zum SQL-Statement.
15. November 2011 14:35
15. November 2011 14:38
15. November 2011 14:42
16. November 2011 08:49
Allerdings wird vermutlich beim EAN auch die Selektivität das Problem sein. Viel EAN-Codes sind bis auf die letzte 2-3 Stellen identisch.
22. November 2011 18:52