Příznaky
Předpokládejme, že máte uloženou proceduru Transact-SQL, jako je například tato, která přebírá parametr s hodnotou tabulky (TVP), který má jako argument omezení:
vytvořit typ TestTvpType jako tabulku
(
id int primární klíč, -- UNIQUE bude také stačit
data int
);
přejít
create procedure TestTvpProc @tvp TestTvpType readonly
Jako
začít
vyberte * od @tvp;
konec;
přejít
Ve scénáři, kdy je tato procedura volána z uložené procedury SQLCLR a dojde k porušení omezení pro argument, může se vám nesprávně zobrazit systémová kontrola, když byste očekávali chybovou zprávu o porušení omezení.
Následuje příklad procedury SQLCLR, která způsobuje porušení omezení uložené procedury:
[SqlProcedure]
public static void ClrProcCallingTsqlProcWithTvpArgument(out int sum)
{
using (SqlConnection connection = new SqlConnection("context connection=true"))
{
součet = 0;
DataTable: myDataTable = new DataTable("TestTvpType");
myDataTable.Columns.Add("id", typeof(Int32));
myDataTable.Columns.Add("data", typeof(Int32));
Fill 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();
. ParameterName = "@tvp";
. SqlDbType = System.Data.SqlDbType.Structured;
. Value = myDataTable;
Příkaz SqlCommand = new SqlCommand("TestTvpProc", připojení);
. CommandType = CommandType.StoredProcedure;
. Parameters.Add(parametr);
připojení. Open();
using (SqlDataReader = příkaz. ExecuteReader())
{
zatímco (čtenář. Read())
{
…;
}
}
}
}
Řešení
Tento problém je opravený v následujících kumulativních aktualizacích pro 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í vrácení správné chybové zprávy o porušení omezení.
Informace o kumulativních aktualizacích pro SQL Server
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 pro SQL Server:
Nejnovější kumulativní aktualizace pro SQL Server 2016
Nejnovější kumulativní aktualizace pro SQL Server 2014
Stav
Společnost Microsoft potvrdila, že se jedná o problém produktů Microsoft, které jsou uvedeny v sekci Platí pro.
Reference
Přečtěte si o terminologii , kterou společnost Microsoft používá k popisování aktualizací softwaru.