Bei Microsoft anmelden
Melden Sie sich an, oder erstellen Sie ein Konto.
Hallo,
Wählen Sie ein anderes Konto aus.
Sie haben mehrere Konten.
Wählen Sie das Konto aus, mit dem Sie sich anmelden möchten.

Problembeschreibung

Angenommen, Sie verfügen über eine gespeicherte Transact-SQL-Prozedur wie die folgende, die einen Tabellenwertparameter (TVP) mit einer Einschränkung als Argument annimmt:

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

In einem Szenario, in dem diese Prozedur von einer gespeicherten SQLCLR-Prozedur aufgerufen wird und die Einschränkung für das Argument verletzt wird, erhalten Sie möglicherweise fälschlicherweise ein System Assert, wenn Sie erwarten, dass eine Fehlermeldung "Einschränkungsverletzung" angezeigt wird.

Der folgende Code ist ein Beispiel für eine SQLCLR-Prozedur, die eine Einschränkungsverletzung für die gespeicherte Prozedur erzeugt:

[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ösung

Dieses Problem wurde in den folgenden kumulativen Updates für SQL Server behoben:

Kumulatives Update 5 für SQL Server 2016 RTM

Kumulatives Update 2 für SQL Server 2016 SP1

Kumulatives Update 4 für SQL Server 2014 Service Pack 2

Hinweis: dieses Update bewirkt, dass die Fehlermeldung "Einschränkungsverletzung" zurückgegeben wird.

Jedes neue kumulative Update für SQL Server enthält alle Hotfixes und Sicherheitsupdates, die im vorherigen kumulativen Update enthalten waren. Schauen Sie sich die neuesten kumulativen Updates für SQL Server an:

Neuestes Kumulatives Update für SQL Server 2016

Aktuelle kumulative Updates für SQL Server 2014

Status

Microsoft hat bestätigt, dass es sich hierbei um ein Problem bei den in diesem Artikel genannten Microsoft-Produkten handelt.

 

Informationsquellen

Informieren Sie sich über die Terminologie , die Microsoft zum Beschreiben von Softwareupdates verwendet.

Benötigen Sie weitere Hilfe?

Möchten Sie weitere Optionen?

Erkunden Sie die Abonnementvorteile, durchsuchen Sie Trainingskurse, erfahren Sie, wie Sie Ihr Gerät schützen und vieles mehr.

In den Communities können Sie Fragen stellen und beantworten, Feedback geben und von Experten mit umfassendem Wissen hören.

War diese Information hilfreich?

Wie zufrieden sind Sie mit der Sprachqualität?
Was hat Ihre Erfahrung beeinflusst?
Wenn Sie auf "Absenden" klicken, wird Ihr Feedback zur Verbesserung von Produkten und Diensten von Microsoft verwendet. Ihr IT-Administrator kann diese Daten sammeln. Datenschutzbestimmungen.

Vielen Dank für Ihr Feedback!

×