首先,我执行创建#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();
答案 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中使用它。
以前曾经问过,见例如。