Hallo,
seit dem ich mir die Sage100 beschafft habe, bin ich dabei die Schnittstellen zu meinen anderen System über die MSSQL Bank herzustellen. Das klappt teils auch schon ganz gut, ich habe sehr viel Erfahrung mit MySQL und LAMP, das hilft hier auch zu verstehen.
Ich habe den SSMS installiert, um Abfragen im Problemfall zu testen und die Syntax ggf. zu verbessern. Was ich jedoch technisch nicht mehr nachvollziehen kann ist folgendes Problem. Ich habe über ein Debian System mit srv Treiber eine Abfrage erstellt. Das klappt. Jedoch, zur Fehlersuche gebe ich mir den SQL String vorab nochmal aus, bekomme ich weniger Datensätze als erwartet. Kopiere ich mir EXAKT den gleichen String, den ich zur Fehlersuche ausgebe per Copy&Paste in den SSMS, bekomme ich die korrekte Datenmenge zurück. Über den SQL Server Profiler habe ich das ganze verfolgt. Der SQL String wird korrekt an den Server gesendet, unerwartete Änderungen am String kann ich also ausschließen.
Nun habe ich schon eine Menge probiert um der Ursache auf die Schliche zu kommen.
SELECT *
FROM KHKArtikel a,
KHKArtikelVarianten av,
KHKVariantenAuspraegungen ava,
KHKPreislistenArtikel pla,
KHKPreislisten pl
WHERE a.Artikelnummer = av.Artikelnummer
AND av.AuspraegungID = ava.AuspraegungID
AND av.Artikelnummer = pla.Artikelnummer
AND av.AuspraegungID = pla.AuspraegungID
AND pla.ListeID = pl.ID
AND a.Mandant = 1
AND av.Mandant = 1
AND ava.Mandant = 1
AND pla.Mandant = 1
AND pl.Mandant = 1
AND pl.ID = '3'
AND pla.Einzelpreis > 0
ORDER BY a.Hersteller,
a.Bezeichnung1
Mit dieser Abfrage erhalte ich 13 Datensätze zurück. Gebe ich exakt die gleiche Abfrage in den SSMS ein, bekomme ich 26 Datensätze. WENN ich jetzt
SELECT *
FROM KHKArtikel a,
KHKArtikelVarianten av,
KHKVariantenAuspraegungen ava,
KHKPreislistenArtikel pla,
KHKPreislisten pl
WHERE a.Artikelnummer = av.Artikelnummer
AND av.AuspraegungID = ava.AuspraegungID
AND av.Artikelnummer = pla.Artikelnummer
AND av.AuspraegungID = pla.AuspraegungID
AND pla.ListeID = pl.ID
AND a.Mandant = 1
AND av.Mandant = 1
AND ava.Mandant = 1
AND pla.Mandant = 1
AND pl.Mandant = 1
AND pl.ID = '3'
AND pla.Einzelpreis > 0
über PHP sende, bekomme ich 24 Datensätze zurück.
Wie zum Teufel kann eine Sortierung Datensätze fressen? Das kenne ich von MySQL gar nicht.
In den Dokus habe ich folgendes gefunden, was mich nun stutzig macht....
https://docs.microsoft.com/de-de/sql/t-sql/queries/select-order-by-clause-transact-sql?view=sql-server-ver15
Die Anzahl der Spalten in der ORDER BY-Klausel ist nicht begrenzt. Die Gesamtgröße der Spalten, die in einer ORDER BY-Klausel angegeben wurden, darf jedoch 8.060 Bytes nicht übersteigen.
Könnte mir hier jemand einen Tipp geben??? Ich muss das Problem verstehen können.
Vielen Dank!
tomquenten