Accedi con Microsoft
Accedi o crea un account.
Salve,
Seleziona un altro account.
Hai più account
Scegli l'account con cui vuoi accedere.

Sintomi

le funzioni User-Defined implementate in Transact-SQL e che restituiscono un singolo valore di dati sono note come funzioni scalare T-SQL User-Defined (FFF). 

La funzionalità Scalar UDF Inlining è stata introdotta in Microsoft SQL Server 2019. Questa funzionalità può migliorare le prestazioni delle query che richiamano FDL scalare T-SQL in cui l'esecuzione UDF rappresenta il collo di bottiglia principale. L'inlineing UDF scalare T-SQL trasforma automaticamente gli UDF inlineabili in espressioni relazionali. 

Questo aggiornamento cumulativo include diverse correzioni nelle aree seguenti per gli scenari in cui una query che usa l'inline UDF scalare potrebbe restituire un messaggio di errore o risultati imprevisti:

  • L'errore di mancata corrispondenza del tipo si verifica se il tipo restituito del file UDF è un sql_variant (aggiunto in cu2 SQL Server 2019).

  • La chiamata UDF dasp_executesqlannulla l'esecuzione (aggiunta a SQL Server 2019 CU2).

  • Le FDU che fanno riferimento a etichette senza un comando GOTO associato restituiscono risultati non corretti (aggiunti in SQL Server 2019 CU2).

  • Le condizioni di memoria esaurita e le perdite di memoria si verificano a causa di FFF scalari molto grandi (aggiunti in SQL Server CU2 2019).

  • Le variabili non inizializzate utilizzate nelle istruzioni condition (IF-ELSE) causano errori (aggiunte in SQL Server 2019 CU2).

  • L'errore di conversione esplicita si verifica se un oggetto UDF ha il parametro sql_variant(aggiunto in SQL Server 2019 CU7).

  • L'errore si verifica se la funzione scalare fa riferimento CHECKSUM(aggiunta in SQL Server 2019 CU7).

  • La chiamata UDF con molte valutazioni di espressioni scalari può causare un errore di utilità di pianificazione non yielding (aggiunto in SQL Server CU7 2019).

    Nota: la correzione di questo problema può talvolta causare una regressione delle prestazioni. Per ridurre questa regressione delle prestazioni, puoi disabilitare la correzione originale attivando il flag di traccia (TF) 13156.

    Microsoft sta lavorando a una correzione per questa regressione delle prestazioni che sarà disponibile in un aggiornamento dell'account microsoft futuro.

  • L'errore si verifica se la query di riferimento UDF usa OPTION (RECOMPILE)(aggiunto in SQL Server 2019 CU7).

  • Gli errori di autorizzazione si verificano se le visualizzazioni richiamano file UTENTE incorporati (aggiunti in SQL Server 2019 CU9).

  • Le violazioni di accesso si verificano se viene usato ilquery_tsql_scalar_udf_inlinedXEvent (aggiunto in SQL Server 2019 CU9).

  • Il comportamento non coerente si verifica perché l'inlining UDF scalare non rispetta il suggerimento per la query QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_n(aggiunto in SQL Server CU9 2019).

  • Le funzioni UTENTE con inline contengono aggregazioni che possono causare errori di utilità di pianificazione non yielding (aggiunti in SQL Server 2019 CU9).

  • Gli errori di memoria insufficiente si verificano a causa di una sequenza di operazioni scalari sulla stessa variabile nei blocchi condizionali (aggiunti in SQL Server 2019 CU9).

  • Dopo l'aggiornamento a CU9, si verifica una violazione di accesso se un oggetto richiama un file UDF (UDF1) scalare inlineable (UDF1) con un formato UDF scalare inlineable (UDF2) utilizzato come parametro di input (aggiunto in SQL Server 2019 CU11).

  • L'uso delle funzioni UTENTE inline potrebbe causare errori e generare i codici di errore 6846, 1011 e 107 (aggiunti in SQL Server 2019 CU11).

  • Se si includono le UDF eseguite come account non sysadmin, è possibile che venga restituito il messaggio di errore "Si è verificato un grave errore nel comando corrente.  I risultati, se presenti, devono essere scartati" (aggiunti in SQL Server 2019 CU16).

  • Una violazione di accesso si verifica se le tabelle temporanee vengono richiamate all'interno dei file UTENTE tramite sinonimi (aggiunti in Microsoft SQL Server 2022 CU1 e SQL Server 2019 CU19).

  • Una violazione di accesso si verifica se la definizione UDF contiene solo etichette GOTO e un'istruzioneRETURN (aggiunta in cu1 SQL Server 2022 e SQL Server 2019 CU19).

  • La funzione UDF scalare restituisce i risultati in formati di data e ora diversi quando la caratteristica Scalar UDF Inlining è attivata (aggiunta in SQL Server CU3 2022 e SQL Server 2019 CU20).

  • Un file dump viene generato se una query con una clausola di GROUP BY usa FDF inline in un'istruzione SELECT senza una funzione di aggregazione (aggiunta in SQL Server 2022 CU12 e SQL Server 2019 CU26).

  • L'errore "Livello massimo di stored procedure, funzione, trigger o visualizzazione di annidamento superato (limite 32)" si verifica se la funzionalità di inlining UDF scalare è attivata, anche se il livello di annidamento non viene superato (aggiunto in SQL Server 2022 CU12 e SQL Server 2019 CU26).

  • Il danneggiamento della memoria si verifica in sqllang.dll!CProchdr::FDeriveInlineabilityOfScalarUdf se la funzionalità Scalar UDF Inlining è attivata (aggiunta in cu12 SQL Server 2022 e SQL Server 2019 CU26).

Questo aggiornamento cumulativo blocca anche l'inline nei seguenti scenari:

  • Se la funzione UDF fa riferimento a determinate funzioni intrinseche, ad esempio @@ROWCOUNT, i risultati potrebbero essere alterati quando la funzione UDF è incorporata (aggiunta a SQL Server 2019 CU2).

  • Quando le funzioni di aggregazione vengono passate come parametri a una funzione UDF scalare (aggiunta in SQL Server CU2 2019).

  • Se il file UDF fa riferimento a visualizzazioni predefinite, ad esempio: OBJECT_ID) (aggiunte in SQL Server CU2 2019).

  • Se il formato UDF utilizza metodi XML (aggiunti in SQL Server CU4 2019).

  • Se il formato UDF contiene un'istruzione SELECTche usa la clausolaORDER BYma non TOP 1(aggiunta in SQL Server 2019 CU4).

  • Se l'istruzioneSELECT esegue un'assegnazione insieme alla clausola ORDER BY (ad esempio, SELECT @x = @x +1 FROM table ORDER BY column_name) (aggiunta a SQL Server 2019 CU4).

  • Se il file UDF contiene più istruzioni RETURN aggiunte in SQL Server CU5 2019.

  • Se il codice UDF viene chiamato da un'istruzione RETURN (aggiunta in SQL Server CU5 2019).

  • Se la funzione FDU fa riferimento alla funzione STRING_AGG , aggiunta in SQL Server CU5 2019.

  • Se la definizione UDF fa riferimento a tabelle remote (aggiunte in SQL Server CU6 2019).

  • Se la query di chiamata UDF usa GROUPING SETS, CUBEo ROLLUP (aggiunto in cu6 SQL Server 2019).

  • Se la query di chiamata UDF contiene una variabile usata come parametro UDF per l'assegnazione ,ad esempio SELECT @y=2, @x=UDF(@y)) (aggiunta in SQL Server 2019 CU6).

  • Se il formato UDF fa riferimento a colonne crittografate (aggiunte in SQL Server 2019 CU11).

  • Se la FDU contiene riferimenti a WITH XMLNAMESPACES(aggiunto in SQL Server 2019 CU11).

  • Se la query che richiama il file UDF ha Common Table Expressions (CTEs) (aggiunto in SQL Server 2019 CU11).

  • Se la definizione UDF contiene tabelle temporanee o sinonimi per le tabelle temporanee, aggiunte in SQL Server 2022 CU1 e SQL Server 2019 CU19.

  • Se la definizione UDF contiene un'istruzioneSELECTinsieme a una clausola diDISTINCTsu più colonne di assegnazione (aggiunta in SQL Server 2022 CU4 e SQL Server 2019 CU20).

  • Se il codice UDF contiene un'istruzione SELECT che usa la clausola TABLESAMPLE PERCENT e più assegnazioni di variabili (aggiunte in SQL Server 2022 CU7).

  • Se esiste una query di INSERT in una tabella a cui fa riferimento una visualizzazione indicizzata che contiene un file UDF, aggiunto in CU12 di SQL Server 2022 e SQL Server CU26 2019.

Dopo l'aggiornamento a SQL Server CU2 2019, ma prima di eseguire l'aggiornamento a SQL Server 2019 CU5, è consigliabile valutare nuovamente se un codice UDF è idoneo per l'inline. A tale scopo, aggiornare gli oggetti FDF scalare idonei con uno dei metodi seguenti:

Il comando seguente genera uno script per aggiornare i metadati di qualsiasi file FDU scalare inline esistente:

/*

Generates a script that can be used to refresh all active inlineable scalar UDFs.

Note The sp_refreshsqlmodule command does not affect any permissions, extended properties, or SET options that are associated with the object.

*/

SELECT 'EXECUTE sys.sp_refreshsqlmodule ''[' + OBJECT_SCHEMA_NAME(object_id) + +'].' + '[' + OBJECT_NAME(object_id)

+ ']'';' AS 'RefreshStatement'

FROM sys.sql_modules

WHERE is_inlineable = 1

AND inline_type = 1;

GO

Nota: dopo l'aggiornamento a SQL Server CU5 2019, riprenderemo automaticamente la derivazione dell'inlineabilità UDF durante la compilazione.

Risoluzione

Questo problema è stato risolto negli aggiornamenti cumulativi seguenti per SQL Server:

Ogni nuovo aggiornamento cumulativo per SQL Server contiene tutti gli aggiornamenti rapidi e tutte le correzioni per la sicurezza inclusi nell'aggiornamento cumulativo precedente. Scopri gli aggiornamenti cumulativi più recenti per SQL Server:

Stato

Microsoft ha confermato che si tratta di un problema nei prodotti Microsoft elencati nella sezione "Si applica a".

Riferimenti

Informazioni sulla terminologia utilizzata da Microsoft per descrivere gli aggiornamenti software.

Serve aiuto?

Vuoi altre opzioni?

Esplorare i vantaggi dell'abbonamento e i corsi di formazione, scoprire come proteggere il dispositivo e molto altro ancora.

Le community aiutano a porre e a rispondere alle domande, a fornire feedback e ad ascoltare gli esperti con approfondite conoscenze.

Queste informazioni sono risultate utili?

Come valuti la qualità della lingua?
Cosa ha influito sulla tua esperienza?
Premendo Inviare, il tuo feedback verrà usato per migliorare i prodotti e i servizi Microsoft. L'amministratore IT potrà raccogliere questi dati. Informativa sulla privacy.

Grazie per il feedback!

×