Перейти до основного
Підтримка
Вхід
Вхід за допомогою облікового запису Microsoft
Увійдіть або створіть обліковий запис.
Вітаємо,
Виберіть інший обліковий запис.
У вас є кілька облікових записів
Виберіть обліковий запис, за допомогою якого потрібно ввійти.

Ознаки

Припустімо, що у вас Збережена процедура Transact SQL, як-от нижче, що займає значення таблиці (TVP), що має обмеження як аргумент:

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

У випадку, коли цю процедуру буде викликано з відповідної процедури, а обмеження порушено для аргументу, можливо, ви неправильно отримаєте систему, що стверджуватиме, коли ви очікуєте отримати повідомлення про помилку "порушення обмеження".

Нижче наведено приклад процедури SQRCLR, що відповідно до умов, які містять порушення обмеження для збереженої процедури.

[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())

                     {

                           …;

                     }

              }

       }

}

Спосіб вирішення

Ця проблема усунена в таких сукупних оновлень для SQL Server:

Сукупне оновлення 5 для SQL Server 2016 RTM

Сукупне оновлення 2 для SQL Server 2016 SP1

Сукупний пакет оновлень 4 для SQL Server 2014 Service Pack 2

Примітка . у цьому оновленні виникає повідомлення про те, що в повідомленні про помилку "порушення обмеження обмежень" з'являється відповідь.

Кожне нове Сукупне оновлення для SQL Server містить усі виправлення виправлень і виправлень, які були включені до попереднього сукупного оновлення. Ознайомтеся з найновішими сукупними оновленнями для сервера SQL Server:

Найновіше Сукупне оновлення для SQL Server 2016

Найновіші накопичувальне оновлення для SQL Server 2014

Стан

Корпорація Майкрософт підтвердила, що це проблема в продуктах Microsoft, перелічених у розділі "застосовується до".

 

Посилання

Відомості про термінологію , яку корпорація Майкрософт використовує для опису оновлень програмного забезпечення.

Потрібна додаткова довідка?

Потрібні додаткові параметри?

Ознайомтеся з перевагами передплати, перегляньте навчальні курси, дізнайтесь, як захистити свій пристрій тощо.

Спільноти допомагають ставити запитання й відповідати на них, надавати відгуки та дізнаватися думки висококваліфікованих експертів.

Чи ця інформація була корисною?

Наскільки ви задоволені якістю мови?
Що вплинуло на ваші враження?
Натиснувши кнопку "Надіслати", ви надасте свій відгук для покращення продуктів і служб Microsoft. Ваш ІТ-адміністратор зможе збирати ці дані. Декларація про конфіденційність.

Дякуємо за відгук!

×