Sümptomid
Oletame, et teil on Transact-SQL-i salvestatud protseduur (nt järgmine, mis võtab tabelina hinnatud parameetri (TVP), millel on argumendina piirang .
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
Stsenaariumis, kus seda toimingut nimetatakse SQLCLR salvestatud protseduuriks ja kitsendust eiratakse argumendi korral, võib ilmneda valesti süsteemi kinnitus, kui loodate, et tõrketeade "kitsenduse rikkumine" kuvatakse.
Järgmises näites on SQLCLR, mis toodab salvestatud protseduurile piirangu rikkumist.
[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())
{
…;
}
}
}
}
Lahendus
See probleem on lahendatud SQL serveri järgmisi kumulatiivseid värskendusi.
Kumulatiivne Update 5 SQL Server 2016 RTM
Kumulatiivne Update 2 SQL Server 2016 SP1 jaoks
Kumulatiivne värskendus 4 SQL Server 2014 Service Pack 2 jaoks
Märkus See värskendus põhjustab tõrketeate "kitsenduse rikkumine" tagastamise tõrketeate.
Iga uus SQL serveri koondvärskenduses sisaldab kõiki Kiirparandusi ja turvaparandusi, mis kuulusid eelmisele kumulatiivsele versioonile. Vaadake SQL serveri kumulatiivseid värskendusi.
Olek
Microsoft on kinnitanud, et see probleem esineb jaotises "kehtib järgmiste toodete kohta" loetletud Microsofti toodetes.
Viited
Siit saate teada, Kuidas Microsoft kasutab tarkvaravärskenduste kirjeldamiseks.