Symptomen
Ga ervan uit dat u een opgeslagen Transact-SQL-procedure hebt, zoals de volgende: een parameter voor de tabelwaardeparameter (TVP) met een beperking als een 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
In een scenario waarbij deze procedure wordt aangeroepen vanuit een opgeslagen procedure van SQLCLR en de beperking voor het argument wordt geschonden, ontvangt u mogelijk een systeem bevestiging van de fout wanneer u verwacht dat het foutbericht ' Beperkingsfout ' wordt weergegeven.
Hierna volgt een voorbeeld van een SQLCLR-procedure die een schending van de beperking oplevert voor de opgeslagen procedure:
[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())
{
…;
}
}
}
}
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
Opmerking deze update veroorzaakt een foutbericht waarin de juiste fout ' beperking ' wordt weergegeven.
Elke nieuwe cumulatieve update voor SQL Server bevat alle hotfixes en beveiligingsfixes die zijn opgenomen in de vorige cumulatieve update. Bekijk de nieuwste cumulatieve updates voor SQL Server:
Status
Microsoft heeft bevestigd dat dit probleem zich kan voordoen in de Microsoft-producten die worden vermeld in de sectie Van toepassing op.
Verwijzingen
Informatie over de terminologie die door Microsoft wordt gebruikt om software-updates te beschrijven.