Triệu chứng
Giả định rằng bạn có một quy trình được lưu trữ theo đạo luật-SQL, chẳng hạn như các bước sau lấy tham số bảng có giá trị (TVP) có ràng buộc là đối số:
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
Trong kịch bản khi quy trình này được gọi là từ một thủ tục được lưu trữ SQLCLR và ràng buộc bị xâm phạm đối số, bạn có thể không chính xác nhận được một hệ thống khẳng định, khi bạn mong muốn nhận được thông báo lỗi "ràng buộc vi phạm".
Sau đây là một ví dụ về quy trình SQLCLR tạo ra sự vi phạm ràng buộc cho quy trình được lưu trữ:
[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())
{
…;
}
}
}
}
Giải pháp
Sự cố này đã được khắc phục trong các bản Cập Nhật tích lũy sau đây cho SQL Server:
Bản Cập Nhật tích lũy 5 cho SQL Server 2016 RTM
Bản Cập Nhật tích lũy 2 cho SQL Server 2016 SP1
Bản Cập Nhật tích lũy 4 cho SQL Server 2014 gói dịch vụ 2
Lưu ý bản cập nhật này khiến thông báo lỗi "vi phạm ràng buộc chính xác".
Mỗi bản Cập Nhật tích lũy mới cho SQL Server chứa tất cả các bản sửa lỗi và bản sửa lỗi bảo mật đã được đưa vào bản Cập Nhật tích lũy trước đó. Kiểm tra các bản Cập Nhật tích lũy mới nhất cho SQL Server:
Trạng thái
Microsoft đã xác nhận đây là sự cố trong các sản phẩm của Microsoft được liệt kê trong phần "Áp dụng cho".
Tham khảo
Tìm hiểu về thuật ngữ Microsoft sử dụng để mô tả các bản cập nhật phần mềm.