Симптоми
Да предположим, че имате запазена процедура за търгуване на 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 съхранена процедура и ограничението е нарушено за аргумента, е възможно да получите неправилна констатация за системата, ако очаквате да получите съобщение за грешка "нарушение на ограничения".
По-долу е даден пример за процедура на 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 2016 RTM
Кумулативна актуализация 2 за SQL Server 2016 SP1
Кумулативна актуализация 4 за SQL Server 2014 Service Pack 2
Забележка тази актуализация създава съобщение за грешка "нарушение на ограниченията"
Всяка нова сборна актуализация за SQL Server съдържа всички поправки и корекции на защитата, които са включени в предишната сборна актуализация. Вижте последните сборни актуализации за SQL Server:
Състоянието
Microsoft потвърди, че това е проблем в продуктите на Microsoft, които са посочени в секцията "важи за".
Препратки
Научете повече за терминологията , която Microsoft използва, за да опише софтуерни актуализации.