Simptomi
Pretpostavimo da imate spremljenu proceduru Transact-SQL, kao što je sljedeći koji uzima parametar tablice – vrijednost (TVP) koji sadrži ograničenje kao 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
U scenariju u kojem se taj postupak naziva iz spremljene procedure sqlclr i ograničenje je prekršeno za argument, možda ćete neispravno primati sustav, kada biste očekivali da će se pojaviti poruka o pogrešci "ograničenje kršenje".
Slijedi primjer procedure SQLCLR koja stvara kršenje ograničenja za spremljeni postupak:
[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())
{
…;
}
}
}
}
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
Obavijest o tome stvara se poruka o pogrešci "ograničenje ograničenja" u ovom ažuriranju.
Svako novo Kumulativno ažuriranje za SQL Server sadrži sve hitne popravke i sigurnosne popravke koji su uvršteni u prethodno Kumulativno ažuriranje. Pogledajte najnovija kumulativna ažuriranja za SQL Server:
Status
Microsoft je potvrdio da se radi o problemu u Microsoftovim proizvodima navedenim u odjeljku "odnosi se na".
Reference
Saznajte više o terminologiji koju Microsoft koristi za opisivanje softverskih ažuriranja.