FIX: Funzione in un'aggregazione definita dal pi¨ chiamate a un utente funzione pu˛ restituire risultati non corretti

Traduzione articoli Traduzione articoli
Identificativo articolo: 288957 - Visualizza i prodotti a cui si riferisce l?articolo.
BUG #: 236595 (RIFERIMENTO)
Espandi tutto | Chiudi tutto

In questa pagina

Sintomi

SQL Server potrebbe restituire risultati non corretti per una query se tutte le seguenti condizioni sono vere:
  • La query contiene due o pi¨ riferimenti alla stessa funzione di aggregazione.
  • Queste funzioni di aggregazione accettano come parametro i risultati di una chiamata alla stessa funzione definita dall'utente (UDF, User Defined Function).
  • Le chiamate alla funzione definita dall'utente passare il parametro di primo stesso.
  • Funzione definita dall'utente accetta di due o pi¨ parametri e i risultati restituiti dipendono dal valore di tali parametri secondari.

Cause

L'utilitÓ di ottimizzazione tenta di trovare duplicate funzioni di aggregazione nella query, in modo che ogni funzione di aggregazione univoco solo venga calcolato una volta. Tale codice non riesce a prendere in considerazione i parametri secondari vengono passati un UDF e in modo non corretto possono identificare due funzioni di aggregazione come equivalente.

Risoluzione

Per risolvere il problema, ottenere il service pack pi¨ recente per Microsoft SQL Server 2000. Per ulteriori informazioni, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito riportato:
290211INF: Come ottenere il Service Pack pi¨ recente per SQL Server 2000

Hotfix

Nota : Ŕ stata creata la seguente correzione rapida prima di SQL Server 2000 Service Pack 1.

La versione inglese di questa correzione deve essere di avere i seguenti attributi di file o versioni successive:
   Version      File name       Platform
   -------------------------------------

   8.00.251     s80251i.exe     x86

				

Status

Microsoft ha confermato che questo problema riguarda i prodotti Microsoft elencati all'inizio di questo articolo. Questo problema Ŕ stato innanzitutto corretto in SQL Server 2000 Service Pack 1.

Informazioni

Nell'esempio riportato di seguito viene illustrato il problema.

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
				
Si noti come ottenere risultati non corretti solo se entrambi i riferimenti per il file UDF consentono di passa il primo parametro stesso, come un nome di colonna o di un valore letterale, alla funzione.

ProprietÓ

Identificativo articolo: 288957 - Ultima modifica: giovedý 6 novembre 2003 - Revisione: 3.1
Le informazioni in questo articolo si applicano a:
  • Microsoft SQL Server 2000 Standard Edition
Chiavi:á
kbmt kbbug kbfix kbqfe kbsqlserv2000sp1fix KB288957 KbMtit
Traduzione automatica articoli
Il presente articolo Ŕ stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non Ŕ sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, pi¨ o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non Ŕ la sua. Microsoft non Ŕ responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 288957
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

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