Symptomer
Anta at du har en Transact-SQL-lagret prosedyre som følgende som tar en tabell objektegenskap parameter (TVP) som har en begrensning som 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
I et scenario der denne prosedyren kalles fra en SQLCLR lagret prosedyre, og betingelsen er brutt for argumentet, du kan få et system assert feil når du forventer å motta en feilmelding av typen "brudd på begrensning".
Følgende er et eksempel på en SQLCLR prosedyre som produserer et brudd på begrensning for den lagrede prosedyren:
[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())
{
…;
}
}
}
}
Løsning
Dette problemet er løst i følgende kumulative oppdateringer for SQL Server:
Kumulativ oppdatering 5 for SQL Server 2016 RTM
Samleoppdatering 2 for SQL Server 2016 SP1
Kumulativ oppdatering 4 for SQL Server 2014 Service Pack 2
Obs! Denne oppdateringen fører til retur av den riktige feilmeldingen "brudd på begrensning".
Hver nye kumulativ oppdatering for SQL Server inneholder alle hurtigreparasjoner og sikkerhetsoppdateringer reparasjonene som er inkludert i den forrige kumulative oppdateringen. Sjekk ut de nyeste kumulative oppdateringene for SQL Server:
Status
Microsoft har bekreftet at dette er et problem i Microsoft-produktene som er oppført i delen "Gjelder for".
Referanser
Lær mer om terminologien som Microsoft bruker til å beskrive oppdateringer av programvare.