10125 – Impossibile creare %1! sulla vista “%2!” perché utilizza l’aggregazione “%3!”. Provare a eliminare l’aggregazione, a non indicizzare la vista o a utilizzare aggregazioni alternative. Sostituire ad esempio AVG con SUM e COUNT_BIG oppure sostituire COUNT con COUNT_BIG.

0
(0)

Messaggio

Codice: 10125

Messaggio in italiano: Impossibile creare %1! sulla vista “%2!” perché utilizza l’aggregazione “%3!”. Provare a eliminare l’aggregazione, a non indicizzare la vista o a utilizzare aggregazioni alternative. Sostituire ad esempio AVG con SUM e COUNT_BIG oppure sostituire COUNT con COUNT_BIG.

Messaggio in inglese: Cannot create %S_MSG on view “%.*ls” because it uses aggregate “%.*ls”. Consider eliminating the aggregate, not indexing the view, or using alternate aggregates. For example, for AVG substitute SUM and COUNT_BIG, or for COUNT, substitute COUNT_BIG.

Spiegazione

Quando si crea un indice su una vista non è possibile usare le seguenti funzioni di aggregazione: COUNT, MIN, MAX e SUM (se fa riferimento a campi che possono essere NULL), AVG, STDEV, STDEVP, VAR, VARP.

Le funzioni di aggregazione non possono essere usate nemmeno in campi che non sono indicizzati.

Un elenco di tutti i vincoli nella creazione di indici sulle viste si può trovare qui:
https://docs.microsoft.com/it-it/sql/relational-databases/views/create-indexed-views

Causa

È stata usata una funzione di aggregazione COUNT, MIN, MAX e SUM (se fa riferimento a campi che possono essere NULL), AVG, STDEV, STDEVP, VAR, VARP all’interno di una vista e si sta cercando di creare un indice sulla vista.

Esempio:

CREATE VIEW V_TEST
AS
SELECT f1, f2, AVG(f3) as SumOfF3
FROM t1
GROUP BY f1, f2

e poi:

CREATE UNIQUE CLUSTERED INDEX [IDX_1] ON [dbo].[V_TEST] (f1 ASC)

Parametri

%1! rappresenta l’indice che si sta tentando di creare

%2! rappresenta la vista su cui si sta tentando di creare l’indice

%3! rappresenta la funzione che non è possibile usare nella vista se deve essere indicizzata

Soluzione

Non utilizzare le funzioni di aggregazione specificate.

Si possono rimuovere o sostituire con delle funzioni alternative.

Per esempio, COUNT può essere sostituito con COUNT_BIG:

CREATE VIEW V_TEST
AS
SELECT f1, f2, COUNT(f3) as CountOfF3
FROM t1 GROUP BY f1, f2

diventa

CREATE VIEW V_TEST
AS
SELECT f1, f2, COUNT_BIG(f3) as CountOfF3
FROM t1 GROUP BY f1, f2

la media si può calcolare utilizzando SUM e COUNT_BIG, purché il campo su cui si fa SUM non accetti campi NULL:

CREATE VIEW V_TEST
AS
SELECT f1, f2, AVG(f3) as AvgOfF3
FROM t1 GROUP BY f1, f2

diventa

CREATE VIEW V_TEST
AS
SELECT f1, f2, SUM(f3) / COUNT_BIG(f3) as AvgOfF3
FROM t1 GROUP BY f1, f2

Per MIN e MAX sarebbe possibile usare ROW_NUMBER() e poi selezionare solo la prima riga, ma anche la clausola OVER è vietata, quindi la seguente soluzione non funzionerebbe (vedi errore 10143).

Hai trovato utile questo contenuto?

Valutazione: 0 / 5. Voti: 0

Vota per primo questo contenuto

Ci dispiace che tu abbia trovato inutile o sbagliato questo contenuto

Lasciaci un messaggio

Come possiamo migliorare?

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Moderazione dei commenti attiva. Il tuo commento non apparirà immediatamente.