Помните, что серверный движок SQL, в отличие от большинства реализаций XQuery, выполняет "пессимистическую c stati c печать" - он предполагает, что если что-то может go не так, то оно будет go неправильно.
Выражение //*[local-name()="after"][1]/* [1]
может возвращать более одного элемента - например, оно будет делать это с этим вводом
<x>
<y>
<after>
<z/>
</after>
</y>
<y>
<after>
<z/>
</after>
</y>
</x>
, поэтому компилятор XQuery выводит тип stati c element () *, который не соответствует требованию.
Вероятно, достаточно просто набрать (//*[local-name()="after"]/*)[1]
.
Лично я всегда думал, что пессимисти c stati c печатать было действительно плохой выбор дизайна, но некоторые из ранних разработчиков XQuery, включая Microsoft, были очень заинтересованы в этом.