Мне нужно переместить большой объем данных в базу данных SQL Server 2008. Я получаю данные с исходного сервера и пишу с помощью SqlBulkCopy на целевой сервер. эти данные должны быть проанализированы из хранимой процедуры и затем удалены. Я хотел бы создать временные данные, но, если я создам временные данные на клиенте, используя SqlCommand, SqlBulkCopy может получить доступ к таблице и отлично работать, если я выполняю тот же скрипт на сервере с хранимой процедурой, возвращаемой SqlBulkCopy.WriteToServer InvalidOperationException "не удается получить доступ к целевой таблице" #Tax"SqlBulkCopy для временной таблицы в SqlServer 2008
это код работает прекрасно:
SqlDataReader oSqlDataReader -> read form server source
SqlConnection oSqlConnection = new SqlConnection(_ConnectionTarget)
SqlCommand oSqlCommand = new SqlCommand("Create Table #Tax (Id int)", oSqlConnection);
oSqlCommand.CommandType = CommandType.Text;
oSqlCommand.CommandTimeout = 0;
oSqlCommand.ExecuteNonQuery();
SqlBulkCopy oSqlBulkCopy = new SqlBulkCopy(oSqlConnection)
oSqlBulkCopy.DestinationTableName = "#Tax";
oSqlBulkCopy.WriteToServer(oSqlDataReader);
это код бросает исключение InvalidOperationException:
SqlDataReader oSqlDataReader -> read form server a
SqlConnection oSqlConnection = new SqlConnection(_ConnectionTarget)
SqlCommand oSqlCommand = new SqlCommand("SP_CreateTax", oSqlConnection);
oSqlCommand.CommandType = CommandType.StoredProcedure;
oSqlCommand.CommandTimeout = 0;
oSqlCommand.ExecuteNonQuery();
SqlBulkCopy oSqlBulkCopy = new SqlBulkCopy(oSqlConnection)
oSqlBulkCopy.DestinationTableName = "#Tax";
oSqlBulkCopy.WriteToServer(oSqlDataReader);
SP_CreateTax:
Create Procedure SP_CreateTax
AS
Begin
Create Table #Tax (Id int)
End
Привет, спасибо за ответ, используя CommandType.StoredProcedure вы должны установить имя SP, а также нет исключения в ExecuteNonQuery(), поэтому sp был выполнен. Также, чтобы получить подтверждение, которое я переименовал из #Tax, чтобы набрать имя таблицы в SP, и таблица была создана на сервере. – FDB
@FDB Mmm..I понимается. Убедитесь, что пользователь SQL Server, который вы используете для подключения, имеет достаточные разрешения. –