Logga in med Microsoft
Logga in eller skapa ett konto.
Hej,
Välj ett annat konto.
Du har flera konton
Välj det konto som du vill logga in med.

Symptom

Anta att du har en Transact-SQL-lagrad procedur som följer en tabell värdes parameter (TVP) som har ett villkor som 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

I ett scenario där den här proceduren anropas från en lagrad SQLCLR-procedur och begränsningen uppträder för argumentet är det möjligt att du felaktigt får ett system assert, när du förväntar dig att få ett fel meddelande om "Restriktionsfel".

Här följer ett exempel på ett SQLCLR-förfarande som ger upphov till en begränsning av den lagrade proceduren:

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

                     {

                           …;

                     }

              }

       }

}

Lösning

Det här problemet är åtgärdat i följande kumulativa uppdateringar för SQL Server:

Kumulativ uppdatering 5 för SQL Server 2016 RTM

Kumulativ uppdatering 2 för SQL Server 2016 SP1

Kumulativ uppdatering 4 för SQL Server 2014 Service Pack 2

Obs! den här uppdateringen ger upphov till fel meddelandet "Restriktionsfel".

Varje ny kumulativ uppdatering för SQL Server innehåller alla snabb korrigeringar och säkerhets korrigeringar som fanns i den föregående kumulativa uppdateringen. Kolla in de senaste kumulativa uppdateringarna för SQL Server:

Senaste kumulativa uppdateringen för SQL Server 2016

Senaste kumulativa uppdateringar för SQL Server 2014

Status

Microsoft har bekräftat att det här är ett problem i Microsoft-produkterna som nämns i "gäller".

 

Referenser

Lär dig mer om terminologin som används av Microsoft för att beskriva program varu uppdateringar.

Behöver du mer hjälp?

Vill du ha fler alternativ?

Utforska prenumerationsförmåner, bläddra bland utbildningskurser, lär dig hur du skyddar din enhet med mera.

Communities hjälper dig att ställa och svara på frågor, ge feedback och få råd från experter med rika kunskaper.

Hade du nytta av den här informationen?

Hur nöjd är du med språkkvaliteten?
Vad påverkade din upplevelse?
Genom att trycka på skicka, kommer din feedback att användas för att förbättra Microsofts produkter och tjänster. IT-administratören kan samla in denna data. Sekretesspolicy.

Tack för din feedback!

×