Ongelman ilmenemistapa
Oletetaan, että sinulla on seuraavankaltainen tallennettu Transact-SQL-toimintosarja, joka käyttää taulukkoarvoista parametria (TVP), jolla on rajoite argumenttina:
luo tyyppi TestTvpType taulukoksi
(
id int perusavain, -- AINUTKERTAISET.ARVOT myös auttavat
data int
);
siirry
luontitoimintosarja TestTvpProc @tvp TestTvpType readonly
muodossa
aloita
valitse * kohteesta @tvp;
loppu;
siirry
Skenaariossa, jossa tämä toimintosarja kutsutaan SQLCLR:ään tallennetusta toimintosarjasta ja argumentin rajoitusta rikotaan, saatat saada virheellisesti järjestelmän vahvistuksen, vaikka odotettaisiin saavasi "rajoitusrikkomuksesta" kertova virhesanoma.
Seuraavassa on esimerkki SQLCLR-toimintosarjasta, joka tuottaa tallennetun toimintosarjan rajoitusrikkomuksen:
[SQL-toimintosarja]
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));
Täytä TVP niin, että se aiheuttaa PERUSAVAIMEN VÄÄRINKÄYTÖS -virheen
myDataTable.Rows.Add(1, 1000);
myDataTable.Rows.Add(1, 2000);
SqlParameter-parametri = new SqlParameter();
-parametrin avulla. ParameterName = "@tvp";
-parametrin avulla. SqlDbType = System.Data.SqlDbType.Structured;
-parametrin avulla. Value = myDataTable;
SqlCommand-komento = new SqlCommand("TestTvpProc", connection);
-komento. CommandType = CommandType.StoredProcedure;
-komento. Parameters.Add(parametri);
yhteys. Open();
using (SqlDataReader reader = komento. ExecuteReader())
{
while (lukija. Read())
{
…;
}
}
}
}
Ratkaisu
Tämä ongelma on korjattu seuraavissa SQL Server kumulatiivisissa päivityksissä:
SQL Server 2016 RTM:n kumulatiivinen päivitys 5
SQL Server 2016 SP1:n kumulatiivinen päivitys 2
SQL Server 2014 Service Pack 2:n kumulatiivinen päivitys 4
Huomautus Tämä päivitys aiheuttaa oikean "rajoitusrikkomuksen" virhesanoman palauttamisen.
Tietoja SQL Serverin kumulatiivisista päivityksistä
Jokainen uusi kumulatiivinen SQL Server -päivitys sisältää kaikki edelliseen kumulatiiviseen päivitykseen sisältyvät hotfix-korjaukset ja tietoturvakorjaukset. Tutustu SQL Serverin uusimpiin kumulatiivisiin päivityksiin:
SQL Server 2016:n uusin kumulatiivinen päivitys
SQL Server 2014:n uusimmat kumulatiiviset päivitykset
Tila
Microsoft on vahvistanut tämän olevan ongelma niissä Microsoftin tuotteissa, jotka ovat listattuna Koskee seuraavia tuotteita -osiossa.
Viitteet
Lue lisää Microsoftin ohjelmistopäivitystensä kuvaamiseen käyttämästä sanastosta .