דלג לתוכן הראשי
היכנס דרך Microsoft
היכנס או צור חשבון.
שלום,
בחר חשבון אחר.
יש לך חשבונות מרובים
בחר את החשבון שברצונך להיכנס באמצעותו.

תופעות

נניח שיש לך שגרה מאוחסנת של Transact-SQL, כגון הפעולות הבאות שלוקחות פרמטר מוערך של טבלה (TVP) המכיל אילוץ כארגומנט:

create type TestTvpType as table   

(

  id int primary key, -- UNIQUE will also do the trick

  data int

); 

go 

create procedure TestTvpProc @tvp TestTvpType readonly

as

begin

  select * from @tvp;

end;

go

בתרחיש שבו הליך זה נקרא מהליך מאוחסן של 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));

              // Populate the TVP so it will trigger a PRIMARY KEY VIOLATION error

              myDataTable.Rows.Add(1, 1000);

              myDataTable.Rows.Add(1, 2000);

              SqlParameter parameter = new SqlParameter();

              parameter.ParameterName = "@tvp";

              parameter.SqlDbType = System.Data.SqlDbType.Structured;

              parameter.Value = myDataTable;

              SqlCommand command = new SqlCommand("TestTvpProc", connection);

              command.CommandType = CommandType.StoredProcedure;

              command.Parameters.Add(parameter);

              connection.Open();

              using (SqlDataReader reader = command.ExecuteReader())

              {

                     while (reader.Read())

                     {

                           …;

                     }

              }

       }

}

פתרון הבעיה

בעיה זו נפתרה בעדכונים המצטברים הבאים עבור 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 2016

העדכונים המצטברים האחרונים עבור SQL Server 2014

מצב

Microsoft אישרה שזוהי בעיה במוצרי Microsoft המופיעים בסעיף "חל על".

 

הפניות

למד אודות המינוח של Microsoft המשמש לתיאור עדכוני תוכנה.

זקוק לעזרה נוספת?

מעוניין באפשרויות נוספות?

גלה את יתרונות המנוי, עיין בקורסי הדרכה, למד כיצד לאבטח את המכשיר שלך ועוד.

קהילות עוזרות לך לשאול שאלות ולהשיב עליהן, לתת משוב ולשמוע ממומחים בעלי ידע עשיר.

האם מידע זה היה שימושי?

עד כמה אתם מרוצים מאיכות השפה?
מה השפיע על החוויה שלך?
בלחיצה על 'שלח', אתה מאפשר למשוב שלך לשפר מוצרים ושירותים של Microsoft. מנהל ה-IT שלך יוכל לאסוף נתונים אלה. הצהרת הפרטיות.

תודה על המשוב!

×