Prisijunkite prie „Microsoft“
Prisijunkite arba sukurkite paskyrą.
Sveiki,
Pasirinkti kitą paskyrą.
Turite kelias paskyras
Pasirinkite paskyrą, kurią naudodami norite prisijungti.

Simptomai

Tarkime, kad turite Transact-SQL saugomą procedūrą, pvz., tai yra lentelės reikšmių parametras (TVP), kuris turi apribojimą kaip 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

Scenarijaus atveju, kai ši procedūra iškviesta iš SQLCLR saugomos procedūros , o argumentas yra pažeistas , gali būti, kad klaidingai gaunate sistemos teiginį, kai jūs tikitės gauti klaidos pranešimą "apribojimo pažeidimas".

Toliau pateikiamas SQLCLR procedūros, gaminančios saugomą procedūrą apribojantį apribojimą, pavyzdys:

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

                     {

                           …;

                     }

              }

       }

}

Sprendimas

Ši problema išspręsta SQL serverio kaupiamajame naujinime:

Kaupiamasis naujinimas 5 SQL serverio 2016 RTM

Kaupiamasis naujinimas 2 SQL serverio 2016 SP1

Kaupiamasis naujinimas 4 SQL serverio 2014 2 pakeitimų paketui

Pastaba Šis naujinimas sukelia klaidos pranešimo tinkamą "CONSTRAINT pažeidimo" grąžinimą.

Kiekvienas naujas Kaupiamasis naujinimas, skirtas "SQL Server", yra visos karštosios pataisos ir saugos pataisos, kurios buvo įtrauktos į ankstesnį kaupiamąjį naujinimą. Peržiūrėkite naujausius kaupiamuosius SQL serverio naujinimus:

Naujausias Kaupiamasis naujinimas, skirtas "SQL Server 2016"

Naujausi kaupiamieji naujinimai, skirti "SQL Server 2014"

Statusą

"Microsoft" patvirtino, kad tai yra "Microsoft" produktų, išvardytų skyriuje "taikoma", problema.

 

Nuorodos

Sužinokite apie terminologiją "Microsoft" naudoja programinės įrangos naujinimams apibūdinti.

Reikia daugiau pagalbos?

Norite daugiau parinkčių?

Sužinokite apie prenumeratos pranašumus, peržiūrėkite mokymo kursus, sužinokite, kaip apsaugoti savo įrenginį ir kt.

Bendruomenės padeda užduoti klausimus ir į juos atsakyti, pateikti atsiliepimų ir išgirsti iš ekspertų, turinčių daug žinių.

Ar ši informacija buvo naudinga?

Ar esate patenkinti kalbos kokybe?
Kas turėjo įtakos jūsų įspūdžiams?
Paspaudus mygtuką Pateikti, jūsų atsiliepimai bus naudojami tobulinant „Microsoft“ produktus ir paslaugas. Jūsų IT administratorius galės rinkti šiuos duomenis. Privatumo patvirtinimas.

Dėkojame už jūsų atsiliepimą!

×