Symptome
Angenommen, Sie verfügen über eine gespeicherte Transact-SQL-Prozedur wie die folgende, die einen Tabellenwertparameter (Table-Valued Parameter, TVP) akzeptiert, der eine Einschränkung als Argument aufweist:
Erstellen des Typs TestTvpType als Tabelle
(
id int primärer Schlüssel, -- UNIQUE führt auch den Trick aus
data int
);
go
Erstellen der Prozedur TestTvpProc @tvp TestTvpType readonly
als
Anfang
Wählen Sie * aus @tvp;
Ende;
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 eine Systembestätigung, wenn Sie erwarten würden, dass die Fehlermeldung "Einschränkungsverletzung" angezeigt wird.
Es folgt 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));
Füllen Sie das TVP auf, damit ein PRIMÄRSCHLÜSSELVERLETZUNGsfehler ausgelöst wird.
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);
Befehl. CommandType = CommandType.StoredProcedure;
Befehl. Parameters.Add(parameter);
Verbindung. 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 richtige Fehlermeldung "Einschränkungsverletzung" zurückgegeben wird.
Informationen zu kumulativen Updates für SQL Server
Jedes neue kumulative Update für SQL Server enthält alle Hotfixes und Sicherheitsupdates, die im vorherigen kumulativen Update enthalten waren. Sehen Sie sich die neuesten kumulativen Updates für SQL Server an:
Neuestes kumulatives Update für SQL Server 2016
Neueste kumulative Updates für SQL Server 2014
Status
Microsoft hat bestätigt, dass dies ein Problem bei den Microsoft-Produkten ist, die im Abschnitt „Gilt für“ aufgeführt sind.
Referenzmaterial
Erfahren Sie mehr über die Terminologie , die Microsoft zum Beschreiben von Softwareupdates verwendet.