Symptome
Angenommen, Sie verwenden eine gespeicherte Transact-SQL-Prozedur wie die folgende, die einen Tabellenwertparameter (TVP) mit einer Einschränkung als Argument akzeptiert:
Typ TestTvpType als Tabelle erstellen
(
id int primary key, -- UNIQUE reicht ebenfalls aus
data int
);
go
Prozedur erstellen TestTvpProc @tvp TestTvpType schreibgeschützt
als
Anfang
select * from @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 Systemzusicherung, obwohl Sie eine Fehlermeldung "Einschränkung verletzen" erwarten würden.
Im Folgenden finden Sie ein Beispiel für eine SQLCLR-Prozedur, die eine Einschränkungsverletzung für die gespeicherte Prozedur verursacht:
[SqlProcedure]
public static void ClrProcCallingTsqlProcWithTvpArgument(out int sum)
{
using (SqlConnection connection = new SqlConnection("context connection=true"))
{
Summe = 0;
DataTable myDataTable = new DataTable("TestTvpType");
myDataTable.Columns.Add("id", typeof(Int32));
myDataTable.Columns.Add("data", typeof(Int32));
Füllen Sie das TVP aus, damit es einen PRIMARY KEY VIOLATION-Fehler auslöst
myDataTable.Rows.Add(1, 1000);
myDataTable.Rows.Add(1, 2000);
SqlParameter parameter = new SqlParameter();
Parameter angezeigt. ParameterName = "@tvp";
Parameter angezeigt. SqlDbType = System.Data.SqlDbType.Structured;
Parameter angezeigt. Wert = myDataTable;
SqlCommand command = new SqlCommand("TestTvpProc", connection);
Befehl. CommandType = CommandType.StoredProcedure;
Befehl. Parameters.Add(parameter);
Verbindung herstellen. Open();
using (SqlDataReader reader = Befehl. ExecuteReader())
{
Während (Leser. Lesen())
{
…;
}
}
}
}
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 korrekte Fehlermeldung "Einschränkung verletzt" angezeigt wird.
Informationen zu kumulativen Updates für SQL Server
Jedes neue kumulative Update für SQL Server enthält alle Hotfixes und Sicherheitsfixes, die im vorherigen kumulativen Update enthalten waren. Sehen Sie sich die neuesten kumulativen Updates für SQL Server an:
Neuestes kumulative 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.