我需要将大量数据移动到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嗯..我明白了。请确保您用于连接的SQL Server用户具有足够的权限。 –