Masuk dengan Microsoft
Masuk atau buat akun.
Halo,
Pilih akun lain.
Anda memiliki beberapa akun
Pilih akun yang ingin Anda gunakan untuk masuk.

Gejala

Asumsikan Anda memiliki prosedur yang disimpan Transact-SQL seperti berikut ini yang mengambil parameter bernilai tabel (TVP) yang memiliki batasan sebagai argumen:

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

Dalam skenario di mana prosedur ini disebut dari prosedur yang disimpan SQLCLR dan constraint dilanggar untuk argumen, Anda mungkin salah menerima sistem menyatakan, ketika Anda akan menerima pesan kesalahan "pelanggaran batasan".

Berikut ini adalah contoh prosedur SQLCLR yang menghasilkan pelanggaran batasan untuk prosedur yang disimpan:

[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())

                     {

                           …;

                     }

              }

       }

}

Pemecahan Masalah

Masalah ini telah diperbaiki dalam pembaruan kumulatif berikut ini untuk SQL Server:

Pembaruan kumulatif 5 untuk SQL Server 2016 RTM

Pembaruan kumulatif 2 untuk SQL Server 2016 SP1

Pembaruan kumulatif 4 untuk SQL Server 2014 Service Pack 2

Catatan pembaruan ini menyebabkan kembalinya pesan kesalahan "pelanggaran batasan" yang benar.

Setiap pembaruan kumulatif baru untuk SQL Server berisi semua perbaikan hotfix dan keamanan yang disertakan dalam pembaruan kumulatif sebelumnya. Lihat pembaruan kumulatif terbaru untuk SQL Server:

Pembaruan kumulatif terbaru untuk SQL Server 2016

Pembaruan kumulatif terbaru untuk SQL Server 2014

Status

Microsoft telah mengonfirmasi bahwa ini adalah masalah pada produk Microsoft yang tercantum di bagian "Berlaku untuk".

 

Referensi

Pelajari tentang terminologi yang digunakan oleh Microsoft untuk menjelaskan pembaruan perangkat lunak.

Perlu bantuan lainnya?

Ingin opsi lainnya?

Jelajahi manfaat langganan, telusuri kursus pelatihan, pelajari cara mengamankan perangkat Anda, dan banyak lagi.

Komunitas membantu Anda bertanya dan menjawab pertanyaan, memberikan umpan balik, dan mendengar dari para ahli yang memiliki pengetahuan yang luas.

Apakah informasi ini berguna?

Seberapa puaskah Anda dengan kualitas bahasanya?
Apa yang memengaruhi pengalaman Anda?
Dengan menekan kirim, umpan balik Anda akan digunakan untuk meningkatkan produk dan layanan Microsoft. Admin TI Anda akan dapat mengumpulkan data ini. Pernyataan Privasi.

Terima kasih atas umpan balik Anda!

×