Belirtiler
Bağımsız değişken olarak kısıtlama içeren bir tablo değerli parametre (TVP) Içeren bir Transact-SQL saklı yordamınız olduğunu varsayalım:
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
Bu yordamın bir SQLCLR saklı yordamından çağrıldığı ve bağımsız değişken için kısıtlama ihlal edildiği bir senaryoda, "kısıtlama ihlali" hata iletisini almayı umduğunuz zaman bir sistem onayı alabilirsiniz.
Aşağıda, saklı yordam için kısıtlama ihlali üreten bir SQLCLR yordamının örneği verilmiştir:
[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())
{
…;
}
}
}
}
Çözüm
Bu sorun, SQL Server için aşağıdaki toplu güncelleştirmelerde giderilmiştir:
SQL Server 2016 RTM için toplu güncelleştirme 5
SQL Server 2016 SP1 için toplu güncelleştirme 2
SQL Server 2014 Service Pack 2 için toplu güncelleştirme 4
Not Bu güncelleştirme, doğru "kısıtlama ihlali" hata iletisinin döndürülmesini sağlar.
Her bir SQL Server toplu güncelleştirmesi, önceki toplu güncelleştirmede bulunan tüm düzeltmeleri ve güvenlik düzeltmelerini içerir. En son SQL Server güncelleştirmelerini gözden geçirin:
Durum
Microsoft bu sorunun "Uygulandığı öğe" bölümünde listelenen Microsoft ürünlerinde bulunduğunu onaylamıştır.
Başvurular
Microsoft 'un yazılım güncelleştirmelerini açıklamak için kullandığı terminoloji hakkında bilgi edinin.