Симптоми
Да предположим, че имате транзакция-SQL съхранена процедура, подобна на следната, която приема табличен параметър (TVP), който има ограничение като аргумент:
създаване на тип TestTvpType като таблица
(
id int първичен ключ, -- UNIQUE също ще свърши работа
data int
);
отидете
създаване на процедура TestTvpProc @tvp TestTvpType readonly
като
започване
Изберете * от @tvp;
край;
отидете
В сценарий, в който тази процедура се извиква от съхранена процедура на SQLCLR и ограничението е нарушено за аргумента, може неправилно да получите системно твърдение, когато очаквате да получите съобщение за грешка "нарушаване на ограничение".
По-долу е даден пример за SQLCLR процедура, която създава нарушение на ограничението за съхранената процедура:
[SqlПроцедура]
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("данни", typeof(Int32));
Попълнете TVP, така че да задейства грешка за нарушаване на първичен ключ
myDataTable.Rows.Add(1, 1000);
myDataTable.Rows.Add(1, 2000);
Параметър SqlParameter = нов SqlParameter();
Параметър. ParameterName = "@tvp";
Параметър. SqlDbType = System.Data.SqlDbType.Structured;
Параметър. Value = myDataTable;
SqlCommand command = new SqlCommand("TestTvpProc", връзка);
Команда. CommandType = CommandType.StoredProcedure;
Команда. Parameters.Add(parameter);
връзка. Open();
using (SqlDataReader reader = command. ExecuteReader())
{
Докато (читател. Четене ())
{
…;
}
}
}
}
Решение
Този проблем е решен в следните кумулативни актуализации за SQL Server:
Сборна актуализация 5 за SQL Server 2016 RTM
Сборна актуализация 2 за SQL Server 2016 SP1
Сборна актуализация 4 за SQL Server 2014 Service Pack 2
Забележка Тази актуализация води до връщането на правилното съобщение за грешка "нарушаване на ограничения".
За кумулативните актуализации за SQL Server
Всяка нова кумулативна актуализация за SQL Server съдържа всички актуални поправки и корекции на защитата, които са били включени в предишната кумулативна актуализация. Прегледайте последните кумулативни актуализации за SQL Server:
Последна сборна актуализация за SQL Server 2016
Последни сборни актуализации за SQL Server 2014
Състояние
Microsoft потвърждава, че това е проблем в продуктите на Microsoft, които са изброени в раздела „Важи за“.
Справки
Научете повече за терминологията , която Microsoft използва за описване на актуализациите на софтуера.