Príznaky
Predpokladajme, že máte uloženú procedúru Transact-SQL, ako je napríklad nasledujúca hodnota, ktorá má parameter s hodnotou tabuľky (TVP) s obmedzením ako 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
V scenári, v ktorom sa tento postup nazýva z SQLCLR uloženej procedúry a obmedzenie je v argumente porušené, môže sa stať, že nesprávne dostanete systém, keď očakávate, že sa zobrazí chybové hlásenie obmedzenie porušenia.
Nasleduje príklad SQLCLR postupu, ktorý spôsobuje porušenie obmedzenia uloženej procedúry:
[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())
{
…;
}
}
}
}
Riešenie
Tento problém je vyriešený 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 SQL Server 2014 Service Pack 2
Poznámka: Táto aktualizácia spôsobí vrátenie chybového hlásenia o chybnom obmedzení obmedzenia.
Každá nová Kumulatívna aktualizácia pre SQL Server obsahuje všetky opravy hotfix 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:
Stav
Spoločnosť Microsoft potvrdzuje, že ide o problém v produktoch spoločnosti Microsoft, ktoré sú uvedené v tomto článku v časti Informácie v tomto článku sa týkajú nasledujúcich produktov.
Odkazy
Oboznámte sa s terminológiou , ktorú spoločnosť Microsoft používa na popis aktualizácií softvéru.