Pazīmes
Pieņemsim, ka jums ir Transact-SQL saglabāta procedūra, piemēram, tālāk norādītā, kura kā argumentu izmanto tabulas vērtības parametru (TVP), kuram ir ierobežojums:
create type TestTvpType as table
(
id int primary key, -- UNIQUE arī paveiks triku
data int
);
doties
create procedure TestTvpProc @tvp TestTvpType readonly
kā
sākt
izvēlieties * no @tvp;
beigas;
doties
Scenārijā, kad šī procedūra tiek izsaukta no SQLCLR saglabātas procedūras un tiek pārkāpts argumenta ierobežojums, iespējams, kļūdaini tiks parādīts sistēmas apgalvojums, lai gan varētu tikt parādīts kļūdas ziņojums "ierobežojuma pārkāpums".
Tālāk ir sniegts piemērs ar SQLCLR procedūru, kas saglabātai procedūrai rada ierobežojuma pārkāpumu:
[SqlProcedure]
public static void ClrProcCallingTsqlProcWithTvpArgument(out int sum)
{
izmantojot (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));
Aizpildiet TVP, lai tas izraisītu PRIMARY KEY VIOLATION kļūdu
myDataTable.Rows.Add(1; 1000);
myDataTable.Rows.Add(1, 2000);
Parametrs SqlParameter = new SqlParameter();
parametru. ParameterName = "@tvp";
parametru. SqlDbType = System.Data.SqlDbType.Structured;
parametru. Value = myDataTable;
Komanda SqlCommand = jauna SqlCommand("TestTvpProc", savienojums);
komanda. CommandType = CommandType.StoredProcedure;
komanda. parametrs Parameters.Add();
savienojums. Atvērts();
izmantojot komandu (SqlDataReader reader = ExecuteReader())
{
kamēr (lasītājs. Lasiet())
{
…;
}
}
}
}
Risinājums
Šī problēma ir novērsta šādos SQL Server kumulatīvajos atjauninājumos:
5. kumulatīvais atjauninājums sistēmai SQL Server 2016 RTM
SQL Server 2016 SP1 2. kumulatīvais atjauninājums
SQL Server 2014 2. servisa pakotnes 4. kumulatīvais atjauninājums
Piezīme Šis atjauninājums izraisa pareizā "constraint violation" kļūdas ziņojuma atgriešanu.
Par SQL Server kumulatīvajiem atjauninājumiem
Katrā jaunajā SQL Server kumulatīvajā atjauninājumā ir visi labojumfaili un drošības labojumi, kas bija iekļauti iepriekšējā kumulatīvajā atjauninājumā. Skatiet jaunākos SQL Server kumulatīvos atjauninājumus:
Jaunākais kumulatīvais atjauninājums SQL Server 2016
Jaunākie kumulatīvie atjauninājumi SQL Server 2014
Statuss
Microsoft apstiprināja, ka šī ir problēma Microsoft produktos, kas norādīti sadaļā "attiecas uz".
Atsauces
Uzziniet par terminoloģiju , ko Microsoft izmanto, lai aprakstītu programmatūras atjauninājumus.