我正在创建一个临时表 #ua_temp,它是常规表的子集。我没有收到错误提示,但是当我尝试在第二步从 #ua_temp 中进行 SELECT 操作时,找不到该表。如果我去掉 #,将创建一个名为 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 仅用于调试目的;它不会影响问题。