Symptomen
Stel dat u een Transact-SQL opgeslagen procedure hebt zoals de volgende, waarbij een tabelwaardeparameter (TVP) met een beperking als argument wordt gebruikt:
create type TestTvpType as table
(
id int primaire sleutel, -- UNIEK is ook voldoende
data int
);
ga
procedure maken TestTvpProc @tvp TestTvpType alleen-lezen
net zo
beginnen
selecteer * van @tvp;
einde;
ga
In een scenario waarin deze procedure wordt aangeroepen vanuit een opgeslagen SQLCLRR-procedure en de beperking voor het argument wordt geschonden, ontvangt u mogelijk ten onrechte een systeembevestiging, terwijl u een foutbericht 'beperking schending' zou verwachten.
Hieronder volgt een voorbeeld van een SQLCLR-procedure die een restrictieschending veroorzaakt voor de opgeslagen procedure:
[SqlProcedure]
public static void ClrProcCallingTsqlProcWithTvpArgument(out int sum)
{
using (SqlConnection connection = new SqlConnection("context connection=true"))
{
som = 0;
DataTable myDataTable = new DataTable("TestTvpType");
myDataTable.Columns.Add("id", typevan(Int32));
myDataTable.Columns.Add("gegevens", typevan(Int32));
Vul de TVP zodanig in dat er een PRIMARY KEY VIOLATION-fout wordt veroorzaakt
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 = new SqlCommand("TestTvpProc", connection);
commando. CommandType = CommandType.StoredProcedure;
commando. Parameters.Add(parameter);
verbinding. Open();
met (SqlDataReader reader = opdracht. ExecuteReader())
{
terwijl (lezer. Lezen())
{
…;
}
}
}
}
Oplossing
Dit probleem is opgelost in de volgende cumulatieve updates voor SQL Server:
Cumulatieve update 5 voor SQL Server 2016 RTM
Cumulatieve update 2 voor SQL Server 2016 SP1
Cumulatieve update 4 voor SQL Server 2014 Service Pack 2
Notitie Deze update zorgt ervoor dat het juiste foutbericht 'beperking schending' wordt geretourneerd.
Informatie over cumulatieve updates voor SQL Server
Elke nieuwe cumulatieve update voor SQL Server bevat alle hotfixes en beveiligingspatches uit de vorige cumulatieve update. Bekijk de meest recente cumulatieve updates voor SQL Server:
Meest recente cumulatieve update voor SQL Server 2016
Meest recente cumulatieve updates voor SQL Server 2014
Status
Microsoft heeft bevestigd dat dit een probleem is bij de Microsoft-producten die worden vermeld in de sectie Van toepassing op.
Meer informatie
Meer informatie over de terminologie die Microsoft gebruikt om software-updates te beschrijven.