SQL Server застревает / блокируется на простом усечении при использовании приложением C # - PullRequest
0 голосов
/ 01 октября 2019

У меня проблема с использованием команды TRUNCATE внутри моего приложения C # для удаления всех данных в таблице.

В таблице около 1M строк.

Если я выполню запроспрямо в базу данных с помощью SQL Management Studio для усечения требуется 1 с, если я выполняю свое приложение на c #, процесс SQL сходит с ума (использование памяти и процессор сходит с ума), и он остается заблокированным навсегда.

Ниже соответствующегокод.

Строка подключения

<add name="KnowledgeBaseDB" connectionString="Data Source=LIS-500LGH2;Initial Catalog=KnowledgeBaseDB;Integrated Security=True" providerName="System.Data.SqlClient" />

Код

            private static string connectionString = ConfigurationManager.ConnectionStrings["KnowledgeBaseDB"].ToString();
            using (SqlConnection conn = new SqlConnection(connectionString))
            {
                using (SqlCommand com = new SqlCommand("TRUNCATE TABLE [dbo].[FileTmp]"))
                {
                    conn.Open();
                    com.Connection = conn;
                    com.CommandTimeout = 0;
                    com.ExecuteNonQuery();
                }
            }

Я не использую SET ALLOW_SNAPSHOT_ISOLATION ON.

Единственный доступ к Таблице - это мое приложение, и я делаю следующее в следующем порядке:

  1. Вставка данных в FileTmp с использованием sqlBulkCopy.
  2. Объединить различные данные в FileTmp.
  3. Цикл выбора 1000 строк из FileTmp и копирование их в таблицу «Файл».
  4. Усечение FileTmp

Я знаю, что массовая копия все еще выполняется на SQL Server даже после завершения моим приложением using(SqlConnection...)

...