У меня проблема с использованием команды 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
.
Единственный доступ к Таблице - это мое приложение, и я делаю следующее в следующем порядке:
- Вставка данных в
FileTmp
с использованием sqlBulkCopy
. - Объединить различные данные в
FileTmp
. - Цикл выбора 1000 строк из
FileTmp
и копирование их в таблицу «Файл». - Усечение
FileTmp
Я знаю, что массовая копия все еще выполняется на SQL Server даже после завершения моим приложением using(SqlConnection...)