تخطي إلى المحتوى الرئيسي
الدعم
تسجيل الدخول باستخدام حساب Microsoft
تسجيل الدخول أو إنشاء حساب.
مرحباً،
تحديد استخدام حساب مختلف!
لديك حسابات متعددة
اختر الحساب الذي تريد تسجيل الدخول باستخدامه.

الأعراض

افترض ان لديك اجراء مخزن في 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

بالنسبة إلى السيناريو الذي يتم فيه استدعاء هذا الاجراء من اجراء مخزن سقلكلر وتم انتهاك القيد للوسيطة ، قد تتلقي بشكل غير صحيح تاكيد النظام ، وذلك عندما تتوقع تلقي رسالة الخطا "خرق القيد".

فيما يلي مثال لاجراء سقلكلر ينتج انتهاك قيد للاجراء المخزن:

[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 وخدماتها. سيتمكن مسؤول تكنولوجيا المعلومات لديك من جمع هذه البيانات. بيان الخصوصية.

نشكرك على ملاحظاتك!

×