Прерывистая ошибка неоднозначного столбца в SQL Server 2016 - PullRequest
0 голосов
/ 05 июля 2018

У меня есть сложная хранимая процедура, которая также будет вызывать другие хранимые процедуры как часть рабочего процесса. Я проверил все хранимые процедуры на ошибку неоднозначный столбец ColumnId .

Первая странность заключается в том, что ошибка параметризуется с одним входом, и ошибка не будет воссоздана для всех пользователей, даже с одним и тем же вводом. Вторая странность состоит в том, что я проверил все SELECT, JOIN, WHERE, ORDER BY и GROUP BY на обычные ошибки двусмысленности и не обнаружил никаких нарушений.

Единственное потенциальное нарушение может быть

SELECT      RateID
FROM        Rate.tblRate
INNER JOIN  #tmpRate
ON          tblRate.CustomerID = #tmpRate.CustomerID

Может ли быть проблема в строке ON, поскольку она не

ON Rate.tblRate.CustomerID = #tmpRate.CustomerID

1 Ответ

0 голосов
/ 05 июля 2018

В вашем случае, процесс может возвращать разные или множественные результирующие наборы, что делает это поведение спорадическим. Тем не менее, я видел это для временных таблиц много, хотя я не могу объяснить, почему. Если вы называете эту таблицу псевдонимом, она разрешается каждый раз.

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

Есть много блогов о том, почему это хорошая привычка. Вот один.

...