В вашем случае, процесс может возвращать разные или множественные результирующие наборы, что делает это поведение спорадическим. Тем не менее, я видел это для временных таблиц много, хотя я не могу объяснить, почему. Если вы называете эту таблицу псевдонимом, она разрешается каждый раз.
SELECT RateID
FROM Rate.tblRate r
INNER JOIN #tmpRate t
ON r.CustomerID = t.CustomerID
Это хорошая практика, поскольку она требуется для других экземпляров, таких как табличные переменные.
если object_id ('tempdb .. # temp') не является пустым, удаляет таблицу # temp
select 1 as ID into #temp
declare @table table (ID int)
insert into @table
values
(1)
select *
from
@table
inner join #temp on #temp.ID = @table.ID
Это выдаст ошибку:
Должен объявлять скалярную переменную "@table".
Итак, псевдоним это и будет работать:
select *
from
@table t
inner join #temp on #temp.ID = t.ID
Есть много блогов о том, почему это хорошая привычка. Вот один.