为什么我的临时表会被删除?
目前,我们有:
var listOfSqlCommands = new List<SqlCommand>();
使用SqlCommand
CommandType = CommandType.StoredProcedure;
背景资料:
SqlCommand
)SqlCommand
sp_executesql
被使用的迹象。分析器显示临时表是使用exec CreateTempTableSproc
完整代码:
var listOfSqlCommands = new List<SqlCommand>();
using (var O0aAConnection = new SqlConnection(connectionString))
{
try
{
O0aAConnection.Open();
foreach (DataTable dt in ds.Tables)
{
EntityName = StringDefaultIfNull(syncConfig.Root.XPathSelectElement("./entity[@name='" + dt.TableName + "']"), "O0aATableName").Substring(3);
var O0aACommand = new SqlCommand();
O0aACommand.CommandType = CommandType.StoredProcedure;
O0aACommand.CommandText = "O0aA42_P_" + EntityName + "Sync_OfferingPublish";
var entityNameParam = new SqlParameter("@EntityName", dt.TableName);
O0aACommand.Parameters.Clear();
O0aACommand.Parameters.Add(entityNameParam);
var tblParam = new SqlParameter("@O42_" + EntityName, SqlDbType.Structured);
tblParam.Value = dt;
O0aACommand.Parameters.Add(tblParam);
O0aACommand.Connection = O0aAConnection;
listOfSqlCommands.Add(O0aACommand);
}
using (var createTempTableCommand = new SqlCommand())
{
createTempTableCommand.CommandText = "CreateTempTableSproc";
createTempTableCommand.CommandType = CommandType.StoredProcedure;
createTempTableCommand.Connection = O0aAConnection;
createTempTableCommand.ExecuteNonQuery();
}
// the commands here are NOT seeing the temp table that was created above!!
foreach (var command in listOfSqlCommands)
{
using (var da = new SqlDataAdapter(command))
{
da.Fill(dtResults);
}
}
}
finally
{
O0aAConnection.Close();
}
}
为什么我的临时表会被删除?
答案 0 :(得分:3)
临时表(本地和全局)仅存在于会话的上下文或创建它们的存储过程中。
您必须不使用存储过程来创建它。
EXEC还将为临时表创建一个上下文,如果它们是在EXEC中创建的,它们将从EXEC返回时消失。 EXEC调用的代码将看到现有的临时表。
答案 1 :(得分:1)
您可以链接存储过程的结果
例如:
CREATE PROCEDURE [dbo].[prcCall1]
As
Begin
Select Val=1 into #Temp
Exec [prcCall2]
Select * from #Temp
End
Go
CREATE PROCEDURE [dbo].[prcCall2]
As
Begin
Update #Temp Set Val=Val+1
--Select * from #Temp
End
Go
Exec [dbo].[prcCall1]
返回
Val
2