Symptom
Anta att du har en Transact-SQL-lagrad procedur som följande som tar en tabellvärdesparameter (TVP) som har ett villkor som argument:
skapa typ TestTvpType som tabell
(
id int primärnyckel, -- UNIK kommer också att göra susen
data int
);
gå
skapa procedur TestTvpProc @tvp TestTvpType skrivskyddad
Som framgår av
börja
välj * från @tvp;
slutet;
gå
I ett scenario där den här proceduren anropas från en lagrad SQLCLR-procedur och begränsningen överträds för argumentet, kan du felaktigt få en systemkontroll när du förväntar dig att få ett felmeddelande om "begränsningsöverträdelse".
Följande är ett exempel på en SQLCLR-procedur som skapar en begränsningsöverträdelse för den lagrade proceduren:
[SqlProcedure]
public static void ClrProcCallingTsqlProcWithTvpArgument(out int sum)
{
using (SqlConnection connection = new SqlConnection("context connection=true"))
{
summa = 0;
DataTable myDataTable = new DataTable("TestTvpType");
myDataTable.Columns.Add("id", typeof(Int32));
myDataTable.Columns.Add("data", typeof(Int32));
Fyll i TVP så att det utlöser ett fel med PRIMÄRNYCKELFEL
myDataTable.Rows.Add(1, 1000);
myDataTable.Rows.Add(1, 2000);
SqlParameter-parameter = new SqlParameter();
parametern. ParameterName = "@tvp";
parametern. SqlDbType = System.Data.SqlDbType.Structured;
parametern. Värde = myDataTable;
SqlCommand-kommando = nytt SqlCommand("TestTvpProc", anslutning);
kommando. CommandType = CommandType.StoredProcedure;
kommando. Parameters.Add(parameter);
anslutning. Öppna();
using (SqlDataReader reader = kommando. ExecuteReader())
{
While (läsare. Läsa())
{
…;
}
}
}
}
Lösning
Det här problemet åtgärdas i följande kumulativa uppdateringar för SQL Server:
Kumulativ uppdatering 5 för SQL Server 2016 RTM
Kumulativ uppdatering 2 för SQL Server 2016 SP1
Kumulativ uppdatering 4 för SQL Server 2014 Service Pack 2
Anteckning Den här uppdateringen leder till att korrekt felmeddelande om "begränsningsöverträdelse" returneras.
Om kumulativa uppdateringar för SQL Server
Varje ny kumulativ uppdatering för SQL Server innehåller alla snabbkorrigeringar och säkerhetskorrigeringar som ingick i den tidigare kumulativa uppdateringen. Kolla in de senaste kumulativa uppdateringarna för SQL Server:
Senaste kumulativa uppdateringen för SQL Server 2016
Senaste kumulativa uppdateringar för SQL Server 2014
Status
Microsoft har bekräftat att detta är ett problem i de Microsoft-produkter som anges i avsnittet "Gäller".
Referenser
Läs mer om den terminologi som Microsoft använder för att beskriva programuppdateringar.