Συμπτώματα
Ας υποθέσουμε ότι έχετε μια αποθηκευμένη διαδικασία Transact-SQL, όπως η ακόλουθη που λαμβάνει ως όρισμα μια παράμετρο πίνακα τιμής (TVP) που έχει έναν περιορισμό:
δημιουργία τύπου TestTvpType ως πίνακα
(
id int πρωτεύον κλειδί, -- UNIQUE θα κάνει επίσης το τέχνασμα
data int
);
μετάβαση
δημιουργία διαδικασίας TestTvpProc @tvp TestTvpType μόνο για ανάγνωση
ως
εκκίνηση
επιλέξτε * από @tvp;
τέλος;
μετάβαση
Σε ένα σενάριο όπου αυτή η διαδικασία καλείται από μια αποθηκευμένη διαδικασία SQLCLR και ο περιορισμός παραβιάζεται για το όρισμα, ενδέχεται να λάβετε εσφαλμένα μια επιβεβαίωση συστήματος, ενώ θα περιμένατε να λάβετε ένα μήνυμα λάθους "παραβίαση περιορισμού".
Ακολουθεί ένα παράδειγμα μιας διαδικασίας SQLCLR που παράγει μια παραβίαση περιορισμού για την αποθηκευμένη διαδικασία:
[Διαδικασία_Sql]
δημόσιο στατικό κενό ClrProcCallingTsqlProcWithTvpArgument(out int sum)
{
using (SqlConnection connection = new SqlConnection("context connection=true"))
{
άθροισμα = 0;
DataTable myDataTable = new DataTable("TestTvpType");
myDataTable.Columns.Add("id", typeof(Int32));
myDataTable.Columns.Add("data", typeof(Int32));
Συμπληρώστε το TVP, ώστε να ενεργοποιήσει ένα σφάλμα ΠΑΡΑΒΙΑΣΗΣ ΠΡΩΤΕΥΟΝΤΟΣ ΚΛΕΙΔΙΟΥ
myDataTable.Rows.Add(1, 1000);
myDataTable.Rows.Add(1, 2000);
Παράμετρος SqlParameter = νέα SqlParameter();
παράμετρος. ParameterName = "@tvp";
παράμετρος. SqlDbType = System.Data.SqlDbType.Structured;
παράμετρος. Value = myDataTable;
Εντολή SqlCommand = νέα SqlCommand("TestTvpProc", σύνδεση);
εντολή. CommandType = CommandType.StoredProcedure;
εντολή. Parameters.Add(παράμετρος);
σύνδεση. Open();
χρησιμοποιώντας την εντολή (SqlDataReader = . ExecuteReader())
{
ενώ (αναγνώστης. Ανάγνωση ())
{
…;
}
}
}
}
Επίλυση
Αυτό το πρόβλημα διορθώνεται στις ακόλουθες αθροιστικές ενημερώσεις για SQL Server:
Αθροιστική ενημερωμένη έκδοση 5 για SQL Server 2016 RTM
Αθροιστική ενημερωμένη έκδοση 2 για SQL Server 2016 SP1
Αθροιστική ενημερωμένη έκδοση 4 για SQL Server 2014 Service Pack 2
Σημείωση Αυτή η ενημερωμένη έκδοση προκαλεί την επιστροφή του σωστού μηνύματος λάθους "παραβίαση περιορισμού".
Πληροφορίες σχετικά με τις αθροιστικές ενημερώσεις για SQL Server
Κάθε νέα αθροιστική ενημερωμένη έκδοση για SQL Server περιέχει όλες τις επείγουσες επιδιορθώσεις και ενημερώσεις κώδικα ασφαλείας που συμπεριλήφθηκαν στην προηγούμενη αθροιστική ενημερωμένη έκδοση. Δείτε τις πιο πρόσφατες αθροιστικές ενημερώσεις για SQL Server:
Τελευταία αθροιστική ενημέρωση για το SQL Server 2016
Τελευταίες αθροιστικές ενημερώσεις για το SQL Server 2014
Κατάσταση
Η Microsoft έχει επιβεβαιώσει ότι πρόκειται για ένα ζήτημα που αφορά τα προϊόντα της Microsoft που παρατίθενται στην ενότητα "Ισχύει για".
Παραπομπές
Ενημερωθείτε σχετικά με την ορολογία που χρησιμοποιεί η Microsoft για να περιγράφει τις ενημερώσεις λογισμικού.