Sümptomid
Oletame, et teil on Transact-SQL salvestatud protseduur, näiteks järgmine, mis võtab tabeli väärtus parameeter (TVP), mis on piirang argumendina:
create type TestTvpType as table
(
id int primary key, -- UNIQUE teeb ka triki
data int
);
mine
create procedure TestTvpProc @tvp TestTvpType readonly
kui
alustamine
select * from @tvp;
lõpp;
mine
Stsenaariumis, kus seda protseduuri kutsutakse SQLCLR-i salvestatud protseduurist ja piirangut on argumendi jaoks rikutud, võite saada süsteemi kinnituse valesti, kui eeldate, et kuvatakse tõrketeade "piirangu rikkumine".
Järgnevalt on toodud näide SQLCLR-protseduurist, mis tekitab salvestatud protseduurile kitsendusrikkumise.
[SqlProcedure]
public static void ClrProcCallingTsqlProcWithTvpArgument(out int sum)
{
using (SqlConnection connection = new SqlConnection("context connection=true"))
{
summa = 0;
DataTable myDataTable = new DataTable("TestTvpType");
myDataTable.Columns.Add("id", typeof(Int32));
myDataTable.Columns.Add("data", typeof(Int32));
Asustage TVP nii, et see käivitaks PRIMAARVÕTME RIKKUMISE tõrke
myDataTable.Rows.Add(1, 1000);
myDataTable.Rows.Add(1, 2000);
SqlParameter parameeter = uus SqlParameter();
parameetrit. ParameterName = "@tvp";
parameetrit. SqlDbType = System.Data.SqlDbType.Structured;
parameetrit. Väärtus = myDataTable;
SqlCommand command = new SqlCommand("TestTvpProc", connection);
käsku. CommandType = CommandType.StoredProcedure;
käsku. Parameters.Add(parameeter);
ühenduse loomisega. Open();
kasutamisel (SqlDataReaderi lugeja = käsk. ExecuteReader())
{
ajal (lugeja. Lugemine())
{
…;
}
}
}
}
Lahendus
See probleem on lahendatud järgmistes SQL Server koondvärskendustes.
SQL Server 2016 RTM koondvärskendus 5
SQL Server 2016 SP1 koondvärskendus 2
SQL Server 2014 hoolduspaketi Service Pack 2 koondvärskendus 4
Märkus See värskendus põhjustab õige "piirangurikkumise" tõrketeate tagastamise.
Teave SQL Server koondvärskenduste kohta
Iga uus koondvärskendus SQL Server sisaldab kõiki eelmise koondvärskenduse kiirparandusi ja turbeparandusi. Vaadake uusimaid SQL Server koondvärskendusi.
Uusim koondvärskendus SQL Server 2016 jaoks
Uusimad koondvärskendused SQL Server 2014 jaoks
Olek
Microsoft on kinnitanud, et see on jaotises „Rakenduskoht“ loetletud Microsofti toodete korral esinev probleem.
Viited
Siit leiate teavet microsofti tarkvaravärskenduste terminoloogia kohta.