Pierakstīties, izmantojot Microsoft
Pierakstīties vai izveidot kontu
Sveicināti!
Atlasīt citu kontu.
Jums ir vairāki konti
Izvēlieties kontu, ar kuru vēlaties pierakstīties.

Simptomi

Pieņemsim, ka jums ir Transact-SQL iekļautā procedūra, piemēram, tālāk norādītās, kas izmanto tabulveida parametru (TVP) ar ierobežojumu kā argumentu:

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

Scenārijā, kad šo procedūru sauc par SQLCLR saglabāto procedūru un ierobežojums ir pārkāpts argumentam, varat nepareizi saņemt sistēmas apliecinājumu, ja vēlaties saņemt kļūdas ziņojumu "CONSTRAINT pārkāpums".

Tālāk ir sniegts SQLCLR procedūras piemērs, kurā tiek parādīta iekļautās procedūras ierobežojumu pārkāpums:

[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())

                     {

                           …;

                     }

              }

       }

}

Risinājums

Šī problēma ir novērsta tālāk norādītajos kumulatīvajos SQL Server atjauninājumos:

Kumulatīvais atjauninājums 5 SQL Server 2016 RTM

SQL Server 2016 SP1 kumulatīvais atjauninājums 2

Kumulatīvais atjauninājums 4 SQL Server 2014 2. servisa pakotnei

Ņemiet vērā , ka Šis atjauninājums izraisa kļūdas ziņojuma pareizo "ierobežojumu pārkāpums" atgriešanu.

Katrs jaunais kumulatīvais SQL Server atjauninājums ietver visus labojumfailus un drošības labojumus, kas bija iekļauti iepriekšējā kumulatīvajā atjauninājumā. Skatiet jaunākos kumulatīvos atjauninājumus SQL Server:

Jaunākais SQL Server 2016 kumulatīvais atjauninājums

Jaunākie SQL Server 2014 kumulatīvie atjauninājumi

Statusa

Microsoft ir apstiprinājusi, ka šī problēma pastāv Microsoft produktos, kas ir norādīti sadaļā "attiecas uz".

 

Atsauces

Uzziniet par terminoloģiju , ko Microsoft izmanto, lai aprakstītu programmatūras atjauninājumus.

Nepieciešama papildu palīdzība?

Vēlaties vairāk opciju?

Izpētiet abonementa priekšrocības, pārlūkojiet apmācības kursus, uzziniet, kā aizsargāt ierīci un veikt citas darbības.

Kopienas palīdz uzdot jautājumus un atbildēt uz tiem, sniegt atsauksmes, kā arī saņemt informāciju no ekspertiem ar bagātīgām zināšanām.

Vai šī informācija bija noderīga?

Cik lielā mērā esat apmierināts ar valodas kvalitāti?
Kas ietekmēja jūsu pieredzi?
Nospiežot Iesniegt, jūsu atsauksmes tiks izmantotas Microsoft produktu un pakalpojumu uzlabošanai. Jūsu IT administrators varēs vākt šos datus. Paziņojums par konfidencialitāti.

Paldies par jūsu atsauksmēm!

×