3

我对临时表有一个非常奇怪的问题。我在代码中创建了一个临时表,它显示在 MSSQL 中的 tempdb.sys.tables 下,但是如果我尝试从中选择,我会得到一个

无效的对象名称“#Update”。错误

如果我将创建临时表 sql 直接从我的代码剪切并粘贴到 mssql 管理器中并运行它,它将创建临时表,我可以从中进行选择。然后它将在 tempdb.sys.tables 中显示两个相同的临时表。

也许我忽略了一些东西,但这似乎很奇怪。

using (SqlConnection conn = new SqlConnection(connectionString))
        {
            conn.Open();

            //Execute the command to make a temp table
            using (SqlCommand cmd = conn.CreateCommand())
            {
                cmd.CommandType = CommandType.Text;
                cmd.CommandText = "create table #UpdatePOS (Store_ID nvarchar(50), POSItem_Id nvarchar(50), POSSalesDate datetime, LastModifiedWhen datetime, UpdateResult bit, QTY decimal(18,0));";
                cmd.ExecuteNonQuery();
            }

        }

谢谢!

4

2 回答 2

6

本地临时表(以单个 # 符号为前缀)在创建它的连接断开后消失。如果您使用一个SqlConnection对象创建该表并尝试通过另一个对象访问它,您可能希望使用全局临时表(以## 为前缀),但因为在您断开连接后该表仍然存在,您必须先截断任何数据运行你的 SQL。

更多阅读:http ://technet.microsoft.com/en-us/library/ms186986%28v=sql.105%29.aspx

于 2013-10-16T21:59:00.347 回答
2

永远不可能有两个相同的表,名称可能会发生一些您可能没有注意到的变化。使用 # (local temp table) in 创建的临时表SqlConnection将无法在 MSSQL 管理器中访问,因为它被视为另一个会话,并且本地临时表只能在同一会话中访问。您将能够使用 ## 来执行此操作,因为它们是全局临时表

于 2013-10-16T22:27:31.457 回答