סימפטומים
נניח שיש לך פרוצדורה מאוחסנת של Transact-SQL, כגון הפרמטר המוערך בטבלה (TVP), הכולל אילוץ כארגומנט:
צור סוג TestTvpType כטבלה
(
מזהה int מפתח ראשי, -- הפונקציה UNIQUE תעשה גם את הטריק
int של נתונים
);
בצע
צור פרוצדורה TestTvpProc @tvp TestTvpType לקריאה בלבד
כ:
התחלה
select * from @tvp;
סיום;
בצע
בתרחיש שבו מתבצעת קריאה לפרוצדורה מאוחסנת של SQLCLR וההפרה של האילוץ עבור הארגומנט עלולה לקבל באופן שגוי קביעה של המערכת, כאשר היית מצפה לקבל הודעת שגיאה מסוג "הפרת אילוץ".
להלן דוגמה לפרוצדורת SQLCLR המייצרת הפרת אילוץ עבור הפרוצדורה המאוחסנת:
[SqlProcedure]
public static void ClrProcCallingTsqlProcWithTvpArgument(out int sum)
{
using (SqlConnection connection = new SqlConnection("context connection=true"))
{
sum = 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", connection);
הפקודה. CommandType = CommandType.StoredProcedure;
הפקודה. Parameters.Add(parameter);
חיבור. פתח ();
using (SqlDataReader reader = command. 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 משתמשת לתיאור עדכוני תוכנה.