Мы наблюдаем «интересное поведение» с нашей базой данных SQL Server.У нас есть оператор слияния, который выбирает таблицу X. В предложениях match есть подвыбор таблицы X. Когда мы выполняем хранимую процедуру из SQL Server Tools, она работает нормально.Но при выполнении из IPC (ETL Tool) мы получаем исключение Invalid object name 'X'.
Пока что ничего особенного, насколько я понимаю, не может многое сделать неправильно с разрешениями и прочим.
Странная вещь: оператор merge находится в блоке try, а в блоке catch сообщение об ошибке записывается в таблицу X с помощью оператора update!Как это возможно, когда Sql Server жалуется, что не может найти таблицу X?
Также все отлично работает с другой хранимой процедурой, которая сконструирована таким же образом (с помощью генерации кода), но на другом наборе таблиц..
Код выглядит следующим образом
merge ...
using
(select ...
from dbo.X
where ...
when not matched by target
and not exists (select 1 from dbo.X q2 where ...)
then insert (...
)
values (...
)
when matched and q.ACTION='D'
then delete
when matched AND NOT exists (select 1 from dbo.X q3 where ...)
then update
set
...
OUTPUT $action INTO @l_SummaryOfChanges;
-- Query the results of the table variable.
SELECT ACTION, COUNT(*) AS CountPerChange
FROM @l_SummaryOfChanges
GROUP BY ACTION;
end try
begin catch
update dbo.X
set LAST_ERROR_MSG=ERROR_MESSAGE(), ERROR_COUNTER=ERROR_COUNTER+1
where SYNC_ID=@l_SyncID
end catch
Есть идеи, что происходит? Неверное имя объекта 'sync $ _tabTeiledaten'.