Symptomer
Antag, at du har en gemt Transact-SQL-procedure som denne, der benytter en tabelværdiparameter (TVP) med en begrænsning som argument:
create type TestTvpType as table
(
id int primary key, -- ENTYDIGE gør også tricket
data int
);
gå
create procedure TestTvpProc @tvp TestTvpType skrivebeskyttet
som
begynd
vælg * fra @tvp;
slut;
gå
I et scenarie, hvor denne procedure kaldes fra en SQLCLR-gemt procedure, og betingelsen overtrædes for argumentet, kan du fejlagtigt modtage en systempåstand, selvom du forventer at modtage en fejlmeddelelse om "overtrædelse af begrænsning".
Følgende er et eksempel på en SQLCLR-procedure, der medfører en begrænsningsovertrædelse for den lagrede 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));
Udfyld TVP'en, så den udløser fejlen PRIMARY KEY VIOLATION
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);
kommandoen. CommandType = CommandType.StoredProcedure;
kommandoen. Parameters.Add(parameter);
forbindelse. Open();
ved hjælp af (SqlDataReader reader = kommando. ExecuteReader())
{
Mens (læser. Read())
{
…;
}
}
}
}
Løsning
Dette problem er rettet i følgende kumulative opdateringer til SQL Server:
Kumulativ opdatering 5 til SQL Server 2016 RTM
Samlet opdatering 2 til SQL Server 2016 SP1
Samlet opdatering 4 til SQL Server 2014 Service Pack 2
Bemærk Denne opdatering medfører, at den korrekte fejlmeddelelse "overtrædelse af begrænsning" returneres.
Om kumulative opdateringer til SQL Server
Hver ny kumulativ opdatering til SQL Server indeholder alle de programrettelser og sikkerhedsrettelser, der var inkluderet i den forrige kumulative opdatering. Se de seneste kumulative opdateringer til SQL Server:
Seneste kumulative opdatering til SQL Server 2016
Seneste kumulative opdateringer til SQL Server 2014
Status
Microsoft har bekræftet, at dette er et problem i de Microsoft-produkter, der er angivet i afsnittet "Gælder for".
Referencer
Læs mere om den terminologi , Microsoft bruger til at beskrive softwareopdateringer.