【发布时间】:2020-12-26 22:50:29
【问题描述】:
我有以下代码:
using (var connection = new SqlConnection(constr))
{
connection.Open();
var createTempTables = new SqlCommand("[dbo].[p_CreateTempTable]", connection)
{
CommandType = CommandType.StoredProcedure
};
createTempTables.Parameters.Add(new SqlParameter("@Id", 2));
createTempTables.ExecuteNonQuery();
var actualCommand = new SqlCommand("[dbo].[p_Test]", connection)
{
CommandType = CommandType.StoredProcedure
};
var dt = new DataTable();
dt.Load(actualCommand.ExecuteReader());
}
基本上,[dbo].[p_CreateTempTable] 从表中选择与 ID inut 匹配的行作为参数。然后,[dbo].[p_Test] 只选择临时表。据我了解,只要连接未关闭,临时表就应该持续存在,但我总是得到一个异常,说我的临时表不存在。为什么这不起作用?
注意:如果我改为使用在 C# 中创建临时表的文本命令,则程序运行没有问题。但是我想避免这样做,因为在创建临时表时会有更多的验证,而且由于应用程序是一个 WinForms,我想避免每次逻辑发生变化时重新编译。
【问题讨论】:
-
你能显示 SQL 过程 p_CreateTempTable 吗?
-
一个临时表只在它创建的范围内存在。我非常怀疑你的 2 个语句在不同的范围内运行。
-
在过程完成执行时,在过程中创建的临时表超出范围。在您的代码中,dbo.p_Test 无法访问在 dbo.p_createTempTable 中创建的任何临时表。
-
@Vernou 这是一个简单的
SELECT INTO声明 -
没关系,@RegularNormalDayGuy。
标签: c# sql-server temp-tables