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:
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.