在#temp table create in asp.net c#

时间:2018-03-18 19:40:07

标签: c# asp.net sql-server ado.net

首先,我执行创建#temp表的过程,首先是数据,然后我想要#temp一些列,其他表列使用连接。 第二个查询错误发生后,第一个查询执行(#temp对象无效)

       if (con.State == ConnectionState.Closed)
        { con.Open(); }

        IsInTransaction = true;
        trans = con.BeginTransaction();


        da = new SqlDataAdapter("Execute SP_Statement_Temp", con);
        da.SelectCommand.Transaction = trans;
        DataTable DatTemp = new DataTable();
        da.Fill(DatTemp);
       SelectString = "Select Distinct #temp.IdentityID, TblMasterTypeOfIdentity.TypeOfIdentity,TblIdentity.IdentityName, '' As 'Opening Balance' , '' As 'Closing Balance'  from #temp inner join TblIdentity on TblIdentity.IdentityID=#temp.IdentityID inner join TblMasterTypeOfIdentity on TblMasterTypeOfIdentity.TypeOfIdentityID=#temp.TypeOfIdentityID";    
        CmdString = SelectString + " " + WhereString + " " + OrderBy;

        da = new SqlDataAdapter(CmdString, con);
        da.SelectCommand.Transaction = trans;
        DataTable datDetail = new DataTable();


        da.Fill(datDetail);
        trans.Commit();
        IsInTransaction = false;
        con.Close();

2 个答案:

答案 0 :(得分:2)

这将是因为#temp表在创建SP后立即被删除。

  

存储过程完成后,将自动删除在存储过程中创建的本地临时表。该表可以由创建该表的存储过程执行的任何嵌套存储过程引用。调用创建表的存储过程的进程无法引用该表。

https://docs.microsoft.com/en-us/sql/t-sql/statements/create-table-transact-sql

答案 1 :(得分:2)

如果要创建可以跨连接使用的临时表,可以使用双哈希(public detectLetter(event: KeyboardEvent, x: number, y: number): void { const key: number = event.keyCode; if ( key < 65 || key > 122) { alert("It's not a letter"); } } )而不是单个(##)。这将创建一个全局临时变量,而不是本地临时变量。因此,如果更改#内的SQL以创建名为Execute SP_Statement_Temp而不是##temp的临时变量,则应该能够在SQL中使用它。

以前曾经问过,见例如。

Local and global temporary tables in SQL Server