ข้ามไปที่เนื้อหาหลัก
การสนับสนุน
ลงชื่อเข้าใช้
ลงชื่อเข้าใช้ด้วย 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 และ ข้อจำกัด จะถูกละเมิดสำหรับอาร์กิวเมนต์คุณอาจได้รับระบบ assert อย่างไม่ถูกต้องเมื่อคุณคาดว่าจะได้รับข้อความแสดงข้อผิดพลาด "การละเมิดข้อจำกัด"

ต่อไปนี้เป็นตัวอย่างของกระบวนการ 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 ๒๐๑๖ RTM

การอัปเดตที่สะสม2สำหรับ SQL Server ๒๐๑๖ SP1

การอัปเดตที่สะสม4สำหรับ SQL Server ๒๐๑๔ Service Pack 2

หมายเหตุ การอัปเดตนี้ทำให้เกิดข้อความแสดงข้อผิดพลาดการส่งกลับค่า "การละเมิดข้อจำกัด" ที่ถูกต้อง

การอัปเดตที่สะสมใหม่แต่ละรายการสำหรับ SQL Server ประกอบด้วยโปรแกรมแก้ไขด่วนและการแก้ไขปัญหาด้านความปลอดภัยทั้งหมดที่รวมอยู่ในการอัปเดตที่สะสมก่อนหน้านี้ ตรวจสอบการอัปเดตที่สะสมล่าสุดสำหรับ SQL Server:

การอัปเดตที่สะสมล่าสุดสำหรับ SQL Server ๒๐๑๖

การอัปเดตที่สะสมล่าสุดสำหรับ SQL Server ๒๐๑๔

สถานะ

Microsoft ยืนยันว่าปัญหานี้เป็นปัญหาที่เกิดขึ้นกับผลิตภัณฑ์ของ Microsoft ซึ่งมีการระบุไว้ในส่วน "นำไปใช้กับ"

 

อ้างอิง

เรียนรู้เกี่ยวกับคำ ศัพท์เฉพาะ ทางที่ Microsoft ใช้เพื่ออธิบายการอัปเดตซอฟต์แวร์

ต้องการความช่วยเหลือเพิ่มเติมหรือไม่

ต้องการตัวเลือกเพิ่มเติมหรือไม่

สํารวจสิทธิประโยชน์ของการสมัครใช้งาน เรียกดูหลักสูตรการฝึกอบรม เรียนรู้วิธีการรักษาความปลอดภัยอุปกรณ์ของคุณ และอื่นๆ

ชุมชนช่วยให้คุณถามและตอบคําถาม ให้คําติชม และรับฟังจากผู้เชี่ยวชาญที่มีความรู้มากมาย

ข้อมูลนี้เป็นประโยชน์หรือไม่

คุณพึงพอใจกับคุณภาพภาษาเพียงใด
สิ่งที่ส่งผลต่อประสบการณ์ใช้งานของคุณ
เมื่อกดส่ง คำติชมของคุณจะถูกใช้เพื่อปรับปรุงผลิตภัณฑ์และบริการของ Microsoft ผู้ดูแลระบบ IT ของคุณจะสามารถรวบรวมข้อมูลนี้ได้ นโยบายความเป็นส่วนตัว

ขอบคุณสำหรับคำติชมของคุณ!

×