Gejala
Misalnya Anda memiliki prosedur Transact-SQL yang disimpan seperti berikut ini yang mengambil parameter bernilai tabel (TVP) yang memiliki batasan sebagai argumen:
buat tipe TestTvpType sebagai tabel
(
id kunci primer int, -- UNIQUE juga akan melakukan trik
int data
);
Pergi
buat prosedur TestTvpProc @tvp TestTvpType baca-baca
Sebagai
Mulai
pilih * dari @tvp;
Akhir;
Pergi
Dalam skenario di mana prosedur ini disebut dari prosedur tersimpan SQLCLR dan batasan dilanggar untuk argumen, Anda mungkin salah menerima penegasan sistem, ketika Anda berharap untuk menerima pesan kesalahan "batasan pelanggaran".
Berikut ini adalah contoh prosedur SQLCLR yang menghasilkan pelanggaran batasan untuk prosedur yang disimpan:
[SqlProcedure]
public static void ClrProcCallingTsqlProcWithTvpArgument(out int sum)
{
menggunakan (koneksi SqlConnection = SqlConnection baru("context connection=true"))
{
sum = 0;
DataTable myDataTable = new DataTable("TestTvpType");
myDataTable.Columns.Add("id", typeof(Int32));
myDataTable.Columns.Add("data", typeof(Int32));
Mengisi TVP sehingga akan memicu kesalahan PELANGGARAN KUNCI PRIMER
myDataTable.Rows.Add(1, 1000);
myDataTable.Rows.Add(1, 2000);
SqlParameter parameter = new SqlParameter();
parameter. ParameterName = "@tvp";
parameter. SqlDbType = System.Data.SqlDbType.Structured;
parameter. Nilai = myDataTable;
Perintah SqlCommand = SqlCommand baru("TestTvpProc", koneksi);
Perintah. CommandType = CommandType.StoredProcedure;
Perintah. Parameters.Add(parameter);
Koneksi. Buka();
menggunakan (SqlDataReader reader = perintah. ExecuteReader())
{
sementara (pembaca. Baca())
{
…;
}
}
}
}
Resolusi
Masalah ini telah diperbaiki dalam pembaruan kumulatif berikut untuk SQL Server:
Pembaruan Kumulatif 5 untuk SQL Server RTM 2016
Pembaruan Kumulatif 2 untuk SQL Server 2016 SP1
Pembaruan Kumulatif 4 untuk SQL Server 2014 Paket Layanan 2
Catatan Pembaruan ini menyebabkan pengembalian pesan kesalahan "batasan pelanggaran" yang benar.
Tentang pembaruan kumulatif untuk SQL Server
Setiap pembaruan kumulatif baru untuk SQL Server berisi semua perbaikan keamanan dan hotfix 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 dalam produk Microsoft sebagaimana tercantum di bagian "Berlaku untuk".
Referensi
Pelajari tentang terminologi yang digunakan Microsoft untuk menjelaskan pembaruan perangkat lunak.