Příznaky
Předpokládejme, že máte uloženou proceduru Transact-SQL, třeba následující, která používá parametr s hodnotou tabulky (TVP), který má omezení jako argument:
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
Ve scénáři, kdy je tento postup volán z uložené procedury SQLCLR a u argumentu je porušené omezení , může se stát, že nesprávně obdržíte systémovou hodnotu, když byste očekávali, že se zobrazí chybová zpráva "porušení omezení".
V následujícím příkladu SQLCLR procedura, která v uložené proceduře produkuje porušení omezení:
[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())
{
…;
}
}
}
}
Řešení
Tento problém je opravený v následujících kumulativních aktualizacích systému SQL Server:
Kumulativní aktualizace 5 pro SQL Server 2016 RTM
Kumulativní aktualizace 2 pro SQL Server 2016 SP1
Kumulativní aktualizace 4 pro SQL Server 2014 Service Pack 2
Poznámka: Tato aktualizace způsobí, že se zobrazí chybová zpráva o porušení omezení správnosti.
Každá nová kumulativní aktualizace pro SQL Server obsahuje všechny opravy hotfix a opravy zabezpečení, které byly součástí předchozí kumulativní aktualizace. Podívejte se na nejnovější kumulativní aktualizace SQL serveru:
Stav
Společnost Microsoft potvrzuje, že se jedná o problém v produktech této společnosti, které jsou uvedeny v části Informace v tomto článku jsou určeny pro produkt.
Odkazy
Informace o terminologii , kterou Microsoft používá k popisu aktualizací softwaru.