KB4010162 - DÜZELTME: SQLCLR yordamından TVP bağımsız değişkenli bir Transact-SQL saklı yordamı çağrıldığında sistem onaylama işlemi oluşur

Uygulandığı Öğe
SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Enterprise Core - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use) SQL Server 2016 Service Pack 1

Belirtiler

Bağımsız değişken olarak kısıtlaması olan tablo değerli bir parametreyi (TVP) alan aşağıdaki gibi bir Transact-SQL saklı yordamınız olduğunu varsayalım:

create type TestTvpType as table

(

id int birincil anahtar, -- BENZERSİZ de işinizi görecektir

data int

);

Git

oluşturma yordamı TestTvpProc @tvp TestTvpType salt okunur

olarak

başla

select * from @tvp;

sonu;

Git

Bu yordamın bir SQLCLR saklı yordamından çağrıldığı ve bağımsız değişkende kısıtlamanın ihlal edildiği bir senaryoda, "kısıtlama ihlali" hata iletisi almayı bekleyebilirsiniz.

      

Aşağıda, depolanmış yordam için kısıtlama ihlali oluşturan bir SQLCLR yordamı örneği verilmiştir:

      

[SqlProcedure]

public static void ClrProcCallingTsqlProcWithTvpArgument(out int sum)

{

using (SqlConnection connection = new SqlConnection("context connection=true"))

{

toplam = 0;

DataTable myDataTable = new DataTable("TestTvpType");

myDataTable.Columns.Add("id", typeof(Int32));

myDataTable.Columns.Add("data", typeof(Int32));

TVP'yi BİRİNCİL ANAHTAR İHLALİ hatasını tetikleyecek şekilde doldurun

myDataTable.Rows.Add(1, 1000);

myDataTable.Rows.Add(1, 2000);

SqlParameter parametresi = new SqlParameter();

parametresini kullanın. ParameterName = "@tvp";

parametresini kullanın. SqlDbType = System.Data.SqlDbType.Structured;

parametresini kullanın. Value = myDataTable;

SqlCommand command = new SqlCommand("TestTvpProc", bağlantı);

komutuna basın. CommandType = CommandType.StoredProcedure;

komutuna basın. Parameters.Add(parametre);

bağlantısına tıklayın. Open();

kullanarak (SqlDataReader reader = komut. ExecuteReader())

{

while (okuyucu. Oku())

{

…;

}

}

}

}

Çözüm

Bu sorun, SQL ServerSQL Server için aşağıdaki toplu güncelleştirmelerde düzeltildi:

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

Notlar Bu güncelleştirme doğru "kısıtlama ihlali" hata iletisinin döndürülmesine neden olur.

SQL Server toplu güncelleştirmeleri hakkında

Her yeni toplu güncelleştirme SQL ServerSQL Server, önceki toplu güncelleştirmede yer alan tüm düzeltmeleri ve güvenlik düzeltmelerini içerir. SQL Server için en son toplu güncelleştirmelere göz atın:

SQL Server 2016 için en son toplu güncelleştirme

En son toplu güncelleştirmeler SQL ServerSQL Server 2014

Durum

Microsoft bunun, "Şunlar için geçerlidir" bölümünde listelenen Microsoft ürünlerinde sorun olduğunu doğrulamıştır.

Başvurular

Microsoft'un yazılım güncelleştirmelerini tanımlamak için kullandığı terminoloji hakkında bilgi edinin.