Simptomi
Pieņemsim, ka jums ir Transact-SQL iekļautā procedūra, piemēram, tālāk norādītās, kas izmanto tabulveida parametru (TVP) ar ierobežojumu kā argumentu:
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
Scenārijā, kad šo procedūru sauc par SQLCLR saglabāto procedūru un ierobežojums ir pārkāpts argumentam, varat nepareizi saņemt sistēmas apliecinājumu, ja vēlaties saņemt kļūdas ziņojumu "CONSTRAINT pārkāpums".
Tālāk ir sniegts SQLCLR procedūras piemērs, kurā tiek parādīta iekļautās procedūras ierobežojumu pārkāpums:
[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())
{
…;
}
}
}
}
Risinājums
Šī problēma ir novērsta tālāk norādītajos kumulatīvajos SQL Server atjauninājumos:
Kumulatīvais atjauninājums 5 SQL Server 2016 RTM
SQL Server 2016 SP1 kumulatīvais atjauninājums 2
Kumulatīvais atjauninājums 4 SQL Server 2014 2. servisa pakotnei
Ņemiet vērā , ka Šis atjauninājums izraisa kļūdas ziņojuma pareizo "ierobežojumu pārkāpums" atgriešanu.
Katrs jaunais kumulatīvais SQL Server atjauninājums ietver visus labojumfailus un drošības labojumus, kas bija iekļauti iepriekšējā kumulatīvajā atjauninājumā. Skatiet jaunākos kumulatīvos atjauninājumus SQL Server:
Statusa
Microsoft ir apstiprinājusi, ka šī problēma pastāv Microsoft produktos, kas ir norādīti sadaļā "attiecas uz".
Atsauces
Uzziniet par terminoloģiju , ko Microsoft izmanto, lai aprakstītu programmatūras atjauninājumus.