Sql server 无法选择临时表的列?

Sql server 无法选择临时表的列?,sql-server,temp-tables,Sql Server,Temp Tables,似乎无法根据临时表从所选视图继承的列名来选择临时表的列。我得到错误:Msg 207,级别16,状态1,过程GetConsolidatedData,第44行[批处理起始行0] 列名“comp_id”无效 select * into #tmp0 from Competitor_View where [Competitor Name] like @competitor_name; select * into #tmp1 from #tmp0 where [Competitor Part Numb

似乎无法根据临时表从所选视图继承的列名来选择临时表的列。我得到错误:Msg 207,级别16,状态1,过程GetConsolidatedData,第44行[批处理起始行0] 列名“comp_id”无效

select * 
into #tmp0
from Competitor_View
where [Competitor Name] like @competitor_name;

select * 
into #tmp1
from #tmp0
where [Competitor Part Number] like @competitor_part;

select * 
into #CustomerResult
from #tmp1
where [Koyo Part Number] like @koyo_part;

--------------

select * 
into #tmp3
from Customer_View
where [Customer Name] like @customer_name;

select * 
into #tmp4
from #tmp3
where [Customer Part Number] like @customer_part;

select * 
into #CompetitorResult
from #tmp4
where [Koyo Part Number] like @koyo_part;

--everything after this fails
select 
#CompetitorResult.comp_id,
#CompetitorResult.[Competitor Part Number], 
#CompetitorResult.[Competitor Comment], 
#CompetitorResult.[Competitor Name], 
#CompetitorResult.[Koyo Part Number] as [Associated Koyo Part Number],
#CustomerResult.cust_id, 
#CustomerResult.[Customer Part Number], 
#CustomerResult.[Customer Comment], 
#CustomerResult.[Customer Name] 
from #CompetitorResult
join #CustomerResult
on #CompetitorResult.[Koyo Part Number] = #CustomerResult.[Koyo Part Number];
我知道我为该专栏取了正确的名称,因为运行以下命令可以确认:

SELECT  *
FROM    tempdb.sys.columns 
WHERE object_id = OBJECT_ID('tempdb..#CompetitorResult')

您的查询应该如下所示。。。没有任何临时表

select  cp.comp_id
       ,cp.[Competitor Part Number]
       ,cp.[Competitor Comment]
       ,cp.[Competitor Name]
       ,cp.[Koyo Part Number] as [Associated Koyo Part Number]
       ,cu.cust_id
       ,cu.[Customer Part Number]
       ,cu.[Customer Comment]
       ,cu.[Customer Name] 
from Competitor_View cp
INNER JOIN Customer_View cu ON cp.[Koyo Part Number] = cu.[Koyo Part Number]
where cp.[Koyo Part Number] like @koyo_part
  AND cp.[Competitor Part Number] like @competitor_part
  AND cp.[Competitor Name] like @competitor_name
  AND cu.[Customer Name] like @customer_name
  AND cu.[Customer Part Number] like @customer_part
  AND cu.[Koyo Part Number] like @koyo_part

您的查询应该如下所示。。。没有任何临时表

select  cp.comp_id
       ,cp.[Competitor Part Number]
       ,cp.[Competitor Comment]
       ,cp.[Competitor Name]
       ,cp.[Koyo Part Number] as [Associated Koyo Part Number]
       ,cu.cust_id
       ,cu.[Customer Part Number]
       ,cu.[Customer Comment]
       ,cu.[Customer Name] 
from Competitor_View cp
INNER JOIN Customer_View cu ON cp.[Koyo Part Number] = cu.[Koyo Part Number]
where cp.[Koyo Part Number] like @koyo_part
  AND cp.[Competitor Part Number] like @competitor_part
  AND cp.[Competitor Name] like @competitor_name
  AND cu.[Customer Name] like @customer_name
  AND cu.[Customer Part Number] like @customer_part
  AND cu.[Koyo Part Number] like @koyo_part

所有这些选择都是诱人的,它们是绝对必要的吗??但是我非常怀疑……那么从Competitor或Result中选择*加入Competitor或Result上的CustomerResult.[Koyo零件号]=CustomerResult.[Koyo零件号];返回?所有这些选择*都是诱人的,它们是绝对必要的吗??但是我非常怀疑……那么从Competitor或Result中选择*加入Competitor或Result上的CustomerResult.[Koyo零件号]=CustomerResult.[Koyo零件号];return?所以在处理临时表时,它需要知道视图,以使列可以通过它们的名称进行选择?看到这个查询后,我再也不会像以前那样编写查询了。虽然我同意这是最正确的SQL,但我认为这也有点离题了。假设竞争对手_View.comp_id存在,则给定问题中的代码不应出错。@BaconBits此平台的协议是为问题提供最佳解决方案,提供工作差的解决方案违反此协议。因此,这是解决整个问题的更好办法。干杯。@M.Ali是的,但我的观点是,我不会说,你做错了;这样做,因为我们不知道每个搜索这些术语的用户都在做什么。我的意思是,你能解释为什么OP列出的代码不起作用吗?我不能。是的,对于像他或她看起来那样简单的问题,这是一个糟糕的解决方案,但这并不意味着它不应该工作,也不意味着每次使用嵌套临时表都是一个糟糕的解决方案。代码应该是有效的。为什么不呢?这才是真正需要回答的问题。因此,在处理临时表时,它需要知道使列可以通过名称选择的视图?看到此查询后,我再也不会像以前那样编写查询了。虽然我同意这是最正确的SQL,但我认为这也有点离题了。假设竞争对手_View.comp_id存在,则给定问题中的代码不应出错。@BaconBits此平台的协议是为问题提供最佳解决方案,提供工作差的解决方案违反此协议。因此,这是解决整个问题的更好办法。干杯。@M.Ali是的,但我的观点是,我不会说,你做错了;这样做,因为我们不知道每个搜索这些术语的用户都在做什么。我的意思是,你能解释为什么OP列出的代码不起作用吗?我不能。是的,对于像他或她看起来那样简单的问题,这是一个糟糕的解决方案,但这并不意味着它不应该工作,也不意味着每次使用嵌套临时表都是一个糟糕的解决方案。代码应该是有效的。为什么不呢?这才是真正需要回答的问题。