Ознаки
Припустімо, що у вас Збережена процедура Transact 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
У випадку, коли цю процедуру буде викликано з відповідної процедури, а обмеження порушено для аргументу, можливо, ви неправильно отримаєте систему, що стверджуватиме, коли ви очікуєте отримати повідомлення про помилку "порушення обмеження".
Нижче наведено приклад процедури SQRCLR, що відповідно до умов, які містять порушення обмеження для збереженої процедури.
[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, перелічених у розділі "застосовується до".
Посилання
Відомості про термінологію , яку корпорація Майкрософт використовує для опису оновлень програмного забезпечення.