Príznaky
Predpokladajme, že máte uloženú procedúru Transact-SQL, napríklad nasledujúca, ktorá používa parameter s hodnotou tabuľky (TVP) s obmedzením ako argument:
create type TestTvpType as table
(
id int primary key, -- UNIQUE tiež urobí trik
data int
);
prejsť
create procedure: TestTvpProc @tvp TestTvpType readonly
ako
začať
vybrať * od @tvp;
koniec;
prejsť
V scenári, keď sa táto procedúra volá z uloženej procedúry SQLCLR a obmedzenie pre argument je porušené, sa môže nesprávne zobraziť systémové tvrdenie, pričom by ste očakávali zobrazenie chybového hlásenia o porušení obmedzenia.
Toto je príklad procedúry SQLCLR, ktorá vytvára porušenie obmedzenia pre uloženú procedúru:
[Procedúra SQL]
public static void ClrProcCallingTsqlProcWithTvpArgument(out int sum)
{
using (SqlConnection connection = new SqlConnection("context connection=true"))
{
súčet = 0;
DataTable myDataTable = new DataTable("TestTvpType");
myDataTable.Columns.Add("id", typeof(Int32));
myDataTable.Columns.Add("údaje", typeof(Int32));
Vyplňte TVP tak, aby sa spustila chyba PORUŠENIA PRIMÁRNEHO KĽÚČA
myDataTable.Rows.Add(1, 1000);
myDataTable.Rows.Add(1, 2000);
SqlParameter parameter = new SqlParameter();
. ParameterName = "@tvp";
. SqlDbType = System.Data.SqlDbType.Structured;
. Value = myDataTable;
SqlCommand command = new SqlCommand("TestTvpProc", pripojenie);
. CommandType = CommandType.StoredProcedure;
. Parameters.Add(parameter);
pripojenie. Open();
pomocou príkazu (SqlDataReader reader = príkaz. ExecuteReader())
{
while (čítač. Read())
{
…;
}
}
}
}
Riešenie
Tento problém je opravený v nasledujúcich kumulatívnych aktualizáciách pre SQL Server:
Kumulatívna aktualizácia 5 pre SQL Server 2016 RTM
Kumulatívna aktualizácia 2 pre SQL Server 2016 SP1
Kumulatívna aktualizácia 4 pre balík Service Pack 2 pre SQL Server 2014
Poznámka Táto aktualizácia spôsobuje vrátenie správneho chybového hlásenia o porušení obmedzenia.
Informácie o kumulatívnych aktualizáciách pre SQL Server
Každá nová kumulatívna aktualizácia SQL Server obsahuje všetky rýchle opravy a opravy zabezpečenia, ktoré boli zahrnuté v predchádzajúcej kumulatívnej aktualizácii. Pozrite si najnovšie kumulatívne aktualizácie pre SQL Server:
Najnovšia kumulatívna aktualizácia pre SQL Server 2016
Najnovšie kumulatívne aktualizácie pre SQL Server 2014
Stav
Spoločnosť Microsoft potvrdila, že ide o problém v produktoch spoločnosti Microsoft, ktoré sú uvedené v časti Vzťahuje sa na.
Odkazy
Získajte informácie o terminológii , ktorú Microsoft používa na popis aktualizácií softvéru.