Simptomi
Pretpostavimo da imate spremljenu proceduru Transact-SQL, poput ove koja kao argument uzima parametar vrijednosti tablice (TVP) koji ima ograničenje:
create type TestTvpType as table
(
id int primary key, -- UNIQUE će također učiniti trik
data int
);
Idite na
create procedure TestTvpProc @tvp TestTvpType samo za čitanje
kao što je
početak
Odaberite * iz @tvp;
kraj;
Idite na
U scenariju u kojem se ta procedura poziva iz spremljene procedure SQLCLR i ograničenje je prekršeno za argument, možda ćete neispravno primiti sistemsku tvrdnju, iako biste očekivali poruku o pogrešci "kršenje ograničenja".
Slijedi primjer SQLCLR procedure koja dovodi do kršenja ograničenja za pohranjenu proceduru:
[SqlProcedure]
public static void ClrProcCallingTsqlProcWithTvpArgument(out int sum)
{
using (SqlConnection connection = new SqlConnection("context connection=true"))
{
zbroj = 0;
Podatkovna tablica myDataTable = new DataTable("TestTvpType");
myDataTable.Columns.Add("id"; typeof(Int32));
myDataTable.Columns.Add("podaci"; typeof(Int32));
Popunite TVP tako da pokrene pogrešku POVREDA PRIMARNOG KLJUČA
myDataTable.Rows.Add(1, 1000);
myDataTable.Rows.Add(1, 2000);
SqlParameter parameter = new SqlParameter();
parametra. ParameterName = "@tvp";
parametra. SqlDbType = System.Data.SqlDbType.Structured;
parametra. Vrijednost = myDataTable;
SqlCommand command = new SqlCommand("TestTvpProc", veza);
Naredba. CommandType = CommandType.StoredProcedure;
Naredba. Parameters.Add(parametar);
veza. Open();
pomoću (SqlDataReader reader = naredba. ExecuteReader())
{
while (čitač. Read())
{
…;
}
}
}
}
Rješenje
Taj je problem riješen u sljedećim kumulativnim ažuriranjima za SQL Server:
Kumulativno ažuriranje 5 za SQL Server 2016 RTM
Kumulativno ažuriranje 2 za SQL Server 2016 SP1
Kumulativno ažuriranje 4 za SQL Server 2014 Service Pack 2
Napomena Ovo ažuriranje uzrokuje vraćanje ispravne poruke o pogrešci "kršenje ograničenja".
O kumulativnim ažuriranjima za SQL Server
Svako novo kumulativno ažuriranje za SQL Server sadrži sve hitne popravke i sigurnosne popravke koji su obuhvaćeni prethodnim kumulativnim ažuriranjem. Pogledajte najnovija kumulativna ažuriranja za SQL Server:
Najnovije kumulativno ažuriranje za SQL Server 2016
Najnovija kumulativna ažuriranja za SQL Server 2014
Status
Microsoft je potvrdio da je to problem u Microsoftovim proizvodima koji su navedeni u odjeljku „Odnosi se na“.
Reference
Saznajte više o terminologiji koju Microsoft upotrebljava za opisivanje softverskih ažuriranja.