c# - Sql Server临时表消失

标签 c# sql-server

我正在创建一个临时表 #ua_temp,它是常规表的一个子集。我没有收到错误,但是当我在第二步尝试从 #ua_temp 中选择时,找不到它。如果我删除 #,则会创建一个名为 ua_temp 的表。

我使用了与在其他地方使用 SELECT INTO 创建表完全相同的技术。它运行良好,所以我认为它与数据库设置没有任何关系。谁能看出问题所在?

        // Create temporary table 
        q = new StringBuilder(200);
        q.Append("select policy_no, name, amt_due, due_date, hic, grp, eff_dt, lis_prem, lis_grp, lis_co_pay_lvl, ");
        q.Append("lep_prem, lapsed, dn_code, [filename], created_dt, created_by ");
        q.Append("into #ua_temp from elig_ua_response ");
        q.Append("where [filename] = @fn1 or [filename] = @fn2 ");
        sc = new SqlCommand(q.ToString(), db);
        sc.Parameters.Add(new SqlParameter("@fn1", sFn));
        sc.Parameters.Add(new SqlParameter("@fn2", sFn2));
        int r = sc.ExecuteNonQuery();
        MessageBox.Show(r.ToString() + " rows");

        // Rosters
        q = new StringBuilder(200);
        q.Append("select policy_no,name,amt_due,due_date,hic,grp,eff_dt,");
        q.Append("lis_prem,lis_grp,lis_co_pay_lvl,lep_prem,lapsed,dn_code,[filename] ");
        q.Append("from #ua_temp where (lis_prem > 0.00 or lep_prem > 0.00) ");
        q.Append("and [filename] = @fn order by name");
        sc.CommandText = q.ToString();
        sc.Parameters.Clear();
        sc.Parameters.Add(new SqlParameter("@fn", sFn));
        sda = new SqlDataAdapter(sc);
        sda.Fill(ds, "LIS LEP Roster");

回答一些明显的问题:该程序使用源表 elig_ua_response 运行良好。引入临时表的原因是我想删除这个特定报告的一些行。我在测试时将 [filename] 列放在方括号中,以确保它不是关键字问题。如果将 #ua_temp 替换为 elig_ua_response,则第二个 SELECT 可以正常工作。我为临时表尝试了不同的名称。显示行数的 MessageBox 仅用于调试目的;它不会影响问题。

最佳答案

Joe Zack 的评论帮助我理解了这里发生的事情。一个非常清晰简洁的解释。这应该是一个答案,以便通过谷歌搜索到达这里的人更容易看到。

SqlCommand calls sql with parameters via sp_executesql when there are parameters, which means your temp table gets created inside (and then clean up in) a stored procedure so it's not available to future calls - even when they share the same connection

关于c# - Sql Server临时表消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6629582/

相关文章:

c# - 如何通过单击 Xamarin 4 中的 TableView 单元格打开 TableView

C# - 使用固定大小的输出参数调用非托管函数

c# - 在Grid中使用Expander,扩展区域使用所有空间

sql-server - MS SQL Server Docker数据位置

sql-server - 如果你被问到一个系统是否可以维持双倍增长,你会做哪三件事来回答?

c# - 如何使用 NLog 跟踪每个请求 ASP.NET Web API

c# - 有更好的方法来处理用户输入验证吗?

sql-server - T-SQL 中的结构类型

sql - 这两个查询之间的最佳实践

sql - 如果未提供,则在 SQL Server 中生成新的 GUID