Primjenjuje se na
SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Enterprise Core - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use) SQL Server 2016 Service Pack 1

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:

Najnovije Kumulativno ažuriranje za SQL Server 2016

Najnovija kumulativna ažuriranja za SQL Server 2014

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.

Potrebna vam je dodatna pomoć?

Želite dodatne mogućnosti?

Istražite pogodnosti pretplate, pregledajte tečajeve za obuku, saznajte kako zaštititi uređaj i još mnogo toga.