无法访问从代码创建的临时表

cho*_*obo 2 sql-server ado.net temp-tables sql-server-2008

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

无效的对象名称'#Update'.错误

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

也许我忽略了一些东西,但这看起来很奇怪.

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();
            }

        }
Run Code Online (Sandbox Code Playgroud)

谢谢!

Tro*_*son 6

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

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