Συμπτώματα

User-Defined συναρτήσεις (UDFs) που εφαρμόζονται στο Transact-SQL και που επιστρέφουν μία μόνο τιμή δεδομένων είναι γνωστές ως συναρτήσεις SQL T-User-Defined Scalar (UDFs). 

Microsoft SQL Server 2019 παρουσίασε τη δυνατότητα επεκτασιμότητας UDF που μπορεί να βελτιώσει τις επιδόσεις των ερωτημάτων που καλούν T-SQL Scalar UDFs, όπου η εκτέλεση UDF είναι η κύρια συμφόρηση. Η SQL Κλιμακούμενης UDF Inlining μετατρέπει αυτόματα ενσωματωμένες UDF σε σχεσιακές παραστάσεις. 


Αυτή η αθροιστική ενημέρωση περιλαμβάνει διάφορες επιδιορθώσεις στις ακόλουθες περιοχές για σενάρια στα οποία ένα ερώτημα που χρησιμοποιεί επεκτατικό UDF Inlining μπορεί να επιστρέψει σφάλμα ή μη αναμενόμενα αποτελέσματα:

  • Σφάλμα ασυμφωνίας τύπου εάν ο τύπος επιστροφής του UDF είναι sql_variant (προστέθηκε στο Microsoft SQL Server CU2 2019)

  • Η κλήση UDF από sp_executesql ματαιώνει την εκτέλεση (προστέθηκε στο Microsoft SQL Server 2019 CU2)

  • Οι UDFs που αναφέρονται σε ετικέτες χωρίς συσχετισμένη εντολή GOTO επιστρέφουν εσφαλμένα αποτελέσματα (προστέθηκαν στο Microsoft SQL Server 2019 CU2)

  • Οι συνθήκες εκτός μνήμης και οι διαρροές μνήμης προκύπτουν λόγω πολύ μεγάλων ανυσματάριων UDFs (προστέθηκαν στο Microsoft SQL Server CU2 του 2019)

  • Μη προνοημένες μεταβλητές που χρησιμοποιούνται σε προτάσεις συνθήκης (IF-ELSE) προκαλούν σφάλματα (προστέθηκαν Microsoft SQL Server CU2 2019)

  • Ρητό σφάλμα μετατροπής εάν το UDF SQL_VARIANT παράμετρο (προστέθηκε Microsoft SQL Server 2019 CU7)

  • Παρουσιάστηκε σφάλμα κατά την αναφορά της συνάρτησης κλίμακας CHECKSUM (προστέθηκε Microsoft SQL Server 2019 CU7)

  • Η κλήση UDF με μεγάλο αριθμό επαναξιολόγησης ανυσματικό παραστάσεων μπορεί να οδηγήσει σε σφάλμα μη απόδοσης χρονοδιαγράμματος (προστέθηκε στο Microsoft SQL Server 2019 CU7)

  • Σφάλμα που εμφανίζεται όταν το ερώτημα παραπομπής UDF χρησιμοποιεί option (RECOMPILE) (προστέθηκε Microsoft SQL Server 2019 CU7)

  • Παρουσιάστηκαν σφάλματα δικαιωμάτων όταν οι προβολές καλούν τα επικαλυπτόμενα UDFs (προστέθηκαν Microsoft SQL Server CU9 2019)

  • Παραβιάσεις πρόσβασης που προκύπτουν κατά τη χρήση του XEvent query_tsql_scalar_udf_inlined (προστέθηκαν στο Microsoft SQL Server CU9 του 2019) 

  • Συμπεριφορά χωρίς συνέπεια λόγω μη τήρησης της υπόδειξης ερωτήματος "QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_n" (προστέθηκε στο Microsoft SQL Server 2019 CU9)

  • Τα UDFs με προσθήκη περιέχουν συνάθροιση που θα μπορούσε να οδηγήσει σε σφάλμα μη απόδοσης χρονοδιαγράμματος (προστέθηκε στο Microsoft SQL Server CU9 2019) 

  • Σφάλματα έλλειψης μνήμης λόγω μιας ακολουθίας ανυσματοσταγών λειτουργιών στην ίδια μεταβλητή σε μπλοκ υπό όρους (προστέθηκε στο Microsoft SQL Server CU9 2019)

  • Η παραβίαση πρόσβασης μπορεί να προκύψει όταν ένα αντικείμενο καλεί ένα κλιμακούμενο μη γραμμικό UDF (UDF1) με κλιμακούμενο μη γραμμικό UDF (UDF2) που χρησιμοποιείται ως παράμετρος εισόδου μετά την αναβάθμιση σε CU9 (προστέθηκε στο Microsoft SQL Server 2019 CU11)

  • Η προσθήκη UDFs μπορεί να προκαλέσει σφάλμα με τους ακόλουθους κωδικούς σφάλματος 6846, 1011 και 107 (προστέθηκαν στο Microsoft SQL Server 2019 CU11)


Αυτή η αθροιστική ενημέρωση αποκλείει επίσης την υπογραμμίζοντας τα ακόλουθα σενάρια:

  • Εάν το UDF αναφέρεται σε ορισμένες εγγενείς συναρτήσεις (για παράδειγμα, @@ROWCOUNT) που μπορεί να αλλάξουν τα αποτελέσματα όταν είναι υπογραμμισμένοι (προστίθενται στο Microsoft SQL Server 2019 CU2)

  • Όταν οι συναρτήσεις συγκεντρωτικών αποτελεσμάτων μεταβιβάσκουν ως παράμετροι σε ένα κλιμακωτό UDF (Microsoft SQL Server 2019 CU2)

  • Εάν το UDF αναφέρεται σε ενσωματωμένες προβολές (για παράδειγμα: OBJECT_ID) (προστέθηκε στο Microsoft SQL Server 2019 CU2)

  • Εάν το UDF χρησιμοποιεί μεθόδους XML (προστέθηκε στο Microsoft SQL Server 2019 CU4)

  • Εάν το UDF περιέχει μια select με order by χωρίς "TOP 1" (προστέθηκε στο Microsoft SQL Server 2019 CU4)

  • Εάν το ερώτημα SELECT εκτελεί μια ανάθεση σε συνδυασμό με τον όρο ORDER BY (για παράδειγμα, SELECT @x = @x +1 FROM πίνακα ORDER BY column_name) (προστέθηκε στο Microsoft SQL Server 2019 CU4)

  • Εάν το UDF περιέχει πολλές προτάσεις RETURN (προστέθηκαν στο Microsoft SQL Server 2019 CU5)

  • Εάν το UDF καλείται από μια πρόταση RETURN (προστέθηκε στο Microsoft SQL Server 2019 CU5)

  • Εάν το UDF αναφέρεται στη STRING_AGG (προστέθηκε στο Microsoft SQL Server 2019 CU5)

  • Εάν ο ορισμός UDF αναφέρεται σε απομακρυσμένους πίνακες (Microsoft SQL Server 2019 CU6)

  • Εάν το ερώτημα κλήσης UDF χρησιμοποιεί ΣΎΝΟΛΑ ΟΜΑΔΟΠΟΊΗΣΗς, CUBE ή ROLLUP (προστέθηκε στο Microsoft SQL Server 2019 CU6)

  • Εάν το ερώτημα κλήσης UDF περιέχει μια μεταβλητή που χρησιμοποιείται ως παράμετρος UDF για ανάθεση (για παράδειγμα, SELECT @y=2, @x=UDF(@y)) (προστέθηκε στο Microsoft SQL Server 2019 CU6)

  • Εάν το UDF αναφέρεται σε κρυπτογραφημένες στήλες (προστέθηκε Microsoft SQL Server 2019 CU11)

  • Εάν το UDF περιέχει αναφορές στο "WITH XMLNAMESPACES" (προστέθηκε στο Microsoft SQL Server 2019 CU11)

  • Εάν το ερώτημα που καλεί το UDF έχει κοινές παραστάσεις πίνακα (CTEs) (προστέθηκε στο Microsoft SQL Server 2019 CU11)


Μετά την αναβάθμιση σε Microsoft SQL Server CU2 2019, αλλά πριν από την αναβάθμιση σε CU5, θα πρέπει να αξιολογήσετε εκ των προτέρων εάν ένα UDF είναι κατάλληλο για την υπογραμμισμό. Για να το κάνετε αυτό, ανανεώστε τις κατάλληλες ανυσματάριες UDFs μέσω μίας από τις παρακάτω μεθόδους:

  • Εκτελέστε sp_refreshsqlmodule για τις ισχύουσες ανυσματικές UDFs (ανατρέξτε στο θέμα sp_refreshsqlmodule (Transact-SQL) για λεπτομέρειες σχετικά με αυτήν την αποθηκευμένη διαδικασία συστήματος)

  • Τροποποιήστε ή δημιουργήστε εκ νέου το υπάρχον ανυσματικές UDF χρησιμοποιώντας υπάρχοντα ορισμό, δικαιώματα και ιδιότητες συνόλου (ανατρέξτε στο θέμα ALTER FUNCTION (Transact-SQL))

Η ακόλουθη δέσμη ενεργειών δημιουργεί μια δέσμη ενεργειών για την ανανέωση μετα-δεδομένων για υπάρχουσες ανυσματάριες UDFs με επεκτασιμότητα:

/*

Δημιουργεί μια δέσμη ενεργειών που μπορεί να χρησιμοποιηθεί για την ανανέωση όλων των ενεργών ενσωματωμένων κλιμακωμάτων UDFs.

Σημείωση Η sp_refreshsqlmodule εντολή δεν επηρεάζει τα δικαιώματα, τις εκτεταμένες ιδιότητες,

ή τις επιλογές SET που σχετίζονται με το αντικείμενο.

*/

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

Σημείωση Μετά την αναβάθμιση σε Microsoft SQL Server CU5 2019, θα αντλήσουμε αυτόματα την αστάθεια του UDF κατά τη διάρκεια της μεταγλώττισης ξανά.

Επίλυση

Αυτό το πρόβλημα έχει διορθωθεί στην ακόλουθη αθροιστική ενημέρωση για SQL Server:

Κάθε νέα αθροιστική ενημέρωση για SQL Server περιέχει όλες τις επείγουσες επιδιορθώσεις και όλες τις επιδιορθώσεις ασφαλείας που περιλαμβάνονταν στην προηγούμενη αθροιστική ενημέρωση. Δείτε τις πιο πρόσφατες αθροιστικές ενημερώσεις για SQL Server:

Κατάσταση

Η Microsoft έχει επιβεβαιώσει ότι αυτό είναι ένα πρόβλημα στα προϊόντα της Microsoft που παρατίθενται στην ενότητα "Ισχύει για".

Αναφορές

Μάθετε σχετικά με την ορολογία που χρησιμοποιεί η Microsoft για την περιγραφή των ενημερώσεων λογισμικού.

Χρειάζεστε περισσότερη βοήθεια;

Αναπτύξτε τις δεξιότητές σας
Εξερευνήστε το περιεχόμενο της εκπαίδευσης
Αποκτήστε πρώτοι τις νέες δυνατότητες
Συμμετοχή στο Microsoft Insider

Σας βοήθησαν αυτές οι πληροφορίες;

Πόσο ικανοποιημένοι είστε με την ποιότητα της μετάφρασης;
Τι επηρέασε την εμπειρία σας;

Σας ευχαριστούμε για τα σχόλιά σας!

×