Sintomi
Supponiamo che tu usi la modalità di archiviazione OLAP relazionale (ROLAP) per un gruppo di misure in un'istanza di SQL Server 2014 o 2016 Analysis Services. Dopo aver impostato il valore della proprietà Advanced MaxRolapOrConditions su più di 256, è possibile eseguire query MDX in tale gruppo di misure. In questo caso, viene visualizzato un errore simile al seguente:
#Error il parser DOM non è riuscito a caricare e analizzare il flusso. URL:'' Reason:' operazione interrotta: max-elemento-vincoli Depth violati .' Origine:''. Posizione del file: 0. Linea: 6.
Causa
Analysis Services genera un documento XML pseudo-SQL, che viene quindi analizzato tramite un foglio di stile XML per generare l'istruzione SQL finale inviata all'origine relazionale. Quando si genera il documento XML interno iniziale o le condizioni per una colonna vengono generate come elementi XML annidati come nell'esempio seguente:
<OR> <Condition>column1 = value1</Condition> <OR> <Condition>column1 = value2</Condition> <OR> <Condition>column1 = value3</Condition> </OR> </OR></OR>
La proprietà MaxElementDepth predefinita per un oggetto DOM MSXML usato da Analysis Services per compilare il documento xml è 256 in MSXML 6.0. Pertanto, quando viene aumentata la configurazione di MaxROLAPOrConditions , il documento XML generato può superare questa profondità massima.
Risoluzione
Questo problema è stato risolto con l'aggiornamento cumulativo seguente per SQL Server:
Aggiornamento cumulativo 5 per SQL Server 2016 RTM
Aggiornamento cumulativo 2 per SQL Server 2016 SP1
Aggiornamento cumulativo 4 per SQL Server 2014 SP2
Aggiornamento cumulativo 10 per SQL Server 2014 SP1
Informazioni sugli aggiornamenti cumulativi per SQL Server
Ogni nuovo aggiornamento cumulativo per SQL Server contiene tutti gli hotfix e tutti gli aggiornamenti della sicurezza inclusi nell'aggiornamento cumulativo precedente. Vedere gli ultimi aggiornamenti cumulativi per SQL Server:
Stato
Microsoft ha confermato che questo problema si verifica nei prodotti elencati nella sezione "Si applica a".
Ulteriori informazioni
Questa correzione consente di modificare il modo in cui viene generato il documento XML intermedio, in modo che ogni ulteriore o condizione non sia annidata nell'elemento Prior o XML. Di conseguenza, è possibile aumentare il MaxROLAPOrConditions oltre 256. Tuttavia, esistono ancora limitazioni pratiche per il numero o le condizioni che possono essere usate. Man mano che aumenta il numero o le condizioni, la complessità dell'istruzione SQL generata può superare la capacità del server di database relazionale, causando nuove condizioni di errore. Di seguito sono riportati alcuni esempi di condizioni che possono causare nuovi errori:
-
Superamento del numero massimo di parametri in un'istruzione
-
Superamento del numero massimo di condizioni in una clausola where
-
Errori nell'analisi della stringa di query SQL
-
Superamento della dimensione massima di una stringa di query SQL
È pertanto consigliabile che eventuali modifiche apportate al valore di configurazione di MaxROLAPOrConditions vengano effettuate con cautela.
Riferimenti
Informazioni sulla terminologia utilizzata da Microsoft per descrivere gli aggiornamenti software.