Update: Mehrere Aufrufe an einen Benutzer benutzerdefinierte Funktion in einer Aggregate Function kann falsche Ergebnisse zurück

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 288957 - Produkte anzeigen, auf die sich dieser Artikel bezieht
# FEHLER: 236595 (SHILOH_BUGS)
Alles erweitern | Alles schließen

Auf dieser Seite

Problembeschreibung

SQL Server möglicherweise falsche Ergebnisse für eine Abfrage zurück, wenn alle der folgenden Bedingungen erfüllt sind:
  • Die Abfrage enthält zwei oder mehr Verweise auf die gleiche Aggregatfunktion.
  • Diese Aggregatfunktionen nehmen als die Parameter der Ergebnisse eines Aufrufs dieselbe benutzerdefinierte Funktion (UDF).
  • Die Aufrufe an die benutzerdefinierte Funktion übergeben der gleichen ersten Parameter.
  • Die UDF-Datei hat zwei oder mehr Parameter und die Ergebnisse, die es den Wert von diesen sekundären Parametern abhängig sind zurückgibt.

Ursache

Der Abfrageoptimierer versucht, doppelte Aggregatfunktionen in der Abfrage zu finden, so dass jeder eindeutige Aggregat nur einmal berechnet wird. Dieser Code schlägt fehl sekundäre Parameter berücksichtigen, die an einer UDF-Datei übergeben wird und zwei Aggregate möglicherweise falsch als Entsprechung identifizieren.

Lösung

Installieren Sie das neueste Service Pack für Microsoft SQL Server 2000, um dieses Problem zu beheben. Weitere Informationen finden Sie die folgende KB-Artikelnummer:
290211Info: Wie Sie das neueste SQL Server 2000 Service Pack erhalten

Hotfix

Hinweis : der folgende Hotfix wurde vor der Microsoft SQL Server 2000 Service Pack 1 erstellt.

Die englische Version dieses Updates müsste die folgenden Dateiattribute oder höher:
   Version      File name       Platform
   -------------------------------------

   8.00.251     s80251i.exe     x86

				

Status

Microsoft hat bestätigt, dass es sich hierbei um ein Problem bei den in diesem Artikel genannten Microsoft-Produkten handelt. Dieses Problem wurde erstmals im Microsoft SQL Server 2000 Service Pack 1.

Weitere Informationen

Das folgende Beispiel veranschaulicht das Problem.

CREATE TABLE functest (c1 int NULL, c2 int NULL, c3 int NULL,
 c4 int NULL, c5 int NULL, c6 int NULL)
GO
INSERT INTO functest VALUES(1,2,3,4,5,6)
go
CREATE FUNCTION t3 (@one int, @two int, @three int) RETURNS int AS
BEGIN
  RETURN (@one*@two*@three)
END
GO
--This works correctly, returns 720
SELECT avg(dbo.t3(c1,c2,c3)) * avg(dbo.t3(c4,c5,c6)) correct FROM functest
go
--This is incorrect, returns 36, should be 180
SELECT avg(dbo.t3(c1,c2,c3)) * avg(dbo.t3(c1,c5,c6)) incorrect FROM functest
go
--If you swap c1 and c6, the results are correct! (180)
SELECT avg(dbo.t3(c1,c2,c3)) * avg(dbo.t3(c6,c5,c1)) correct FROM functest
				
Beachten Sie, wie Sie falsche Ergebnisse erhalten, nur wenn beide Verweise auf die benutzerdefinierte Funktion den gleichen ersten Parameter, entweder als Spaltennamen oder Literalwert an die Funktion übergeben.

Eigenschaften

Artikel-ID: 288957 - Geändert am: Donnerstag, 6. November 2003 - Version: 3.1
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft SQL Server 2000 Standard Edition
Keywords: 
kbmt kbbug kbfix kbqfe kbsqlserv2000sp1fix KB288957 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 288957
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com