Simptomi
Pretpostavimo da imate Transact-SQL uskladištenu proceduru poput sledeće koja uzima parametar vrednosti tabele (TVP) koji ima ograničenje kao argument:
create type TestTvpType as table
(
id int primary key, -- UNIQUE će takođe učiniti trik
data int
);
Idi
create procedure TestTvpProc @tvp TestTvpType samo za čitanje
kao
begin
select * from @tvp;
kraj;
Idi
U scenariju u kojem se ova procedura poziva iz SQLCLR uskladištene procedure, a ograničenje je prekršeno za argument, možete pogrešno da dobijete sistemsku tvrdnju, a očekujete da primite poruku o grešci "kršenje ograničenja".
Sledi primer SQLCLR procedure koja proizvodi kršenje ograničenja za uskladištenu proceduru:
[SqlProcedure]
public static void ClrProcCallingTsqlProcWithTvpArgument(out int sum)
{
korišćenje (SqlConnection veza = new SqlConnection("context connection=true"))
{
zbir = 0;
DataTable myDataTable = new DataTable("TestTvpType");
myDataTable.Columns.Add("id", typeof(Int32));
myDataTable.Columns.Add("data", typeof(Int32));
Popunite TVP tako da će aktivirati grešku KRŠENJE PRIMARNOG KLJUČA
myDataTable.Rows.Add(1, 1000);
myDataTable.Rows.Add(1, 2000);
SqlParameter parameter = new SqlParameter();
parametar. ParameterName = "@tvp";
parametar. SqlDbType = System.Data.SqlDbType.Structured;
parametar. Value = myDataTable;
SqlCommand command = new SqlCommand("TestTvpProc", veza);
komande. CommandType = CommandType.StoredProcedure;
komande. Parameters.Add(parametar);
veza. Open();
korišćenje (SqlDataReader reader = komanda. ExecuteReader())
{
while (Reader. Read())
{
…;
}
}
}
}
Rešenje
Ovaj problem je rešen u sledećim kumulativnim ispravkama za SQL Server:
Kumulativna ispravka 5 za SQL Server 2016 RTM
Kumulativna ispravka 2 za SQL Server 2016 SP1
Kumulativna ispravka 4 za SQL Server 2014 servisni paket 2
Napomena Ova ispravka vraća tačnu poruku o grešci "kršenje ograničenja".
Osnovni podaci o kumulativnim ispravkama za SQL Server
Svaka nova kumulativna ispravka za SQL Server sadrži sve hitne i bezbednosne ispravke koje su uključene u prethodnu kumulativnu ispravku. Pogledajte najnovije kumulativne ispravke za SQL Server:
Najnovija kumulativna ispravka za SQL Server 2016
Najnovije kumulativne ispravke za SQL Server 2014
Status
Microsoft je potvrdio da je ovo problem u Microsoft proizvodima koji su navedeni u odeljku „Odnosi se na“.
Reference
Saznajte više o terminologiji koju Microsoft koristi za opis softverskih ispravki.