удалить upv1.RecordID
из group by
пункта
SELECT
upv1.PropertyVal as [Branch],
STUFF((select '; ' + cast(upv2.propertyval as varchar(36))
from upa.UserProfileValue upv2
where upv1.RecordID = upv2.RecordID
and upv2.PropertyID = 9
FOR XML PATH('')), 1, 2, '') [Emails]
FROM upa.UserProfileValue upv1
where upv1.PropertyID = 11
and upv1.PropertyVal <> 'Missing Branch'
group by upv1.PropertyVal
order by upv1.PropertyVal
Для выражения неявно определяет его итеративную переменную (вот почему, Вы не должны были объявлять меня в своем втором примере). Даже если уже будет переменная с тем же именем, то для все еще создаст новый для его объема. Ваш связывать выражение связывается с ворковать переменной за пределами Вашего для цикла, не к одной внутренней части Вашей для цикла. И тот за пределами Вашего цикла не изменяется, таким образом, связанное выражение не изменится.
Пример для демонстрации этого поведения для:
var curr = 0;
var ousideCurrRef = bind curr;
println("Before 'for' loop: curr={curr}");
for (curr in [0..3])
{
println("In 'for' loop: curr={curr} ousideCurrRef={ousideCurrRef}");
}
println("After 'for' loop: curr={curr}");
Это распечатает:
Before 'for' loop: curr=0
In 'for' loop: curr=0 ousideCurrRef=0
In 'for' loop: curr=1 ousideCurrRef=0
In 'for' loop: curr=2 ousideCurrRef=0
In 'for' loop: curr=3 ousideCurrRef=0
After 'for' loop: curr=0
Таким образом ворковать внешняя сторона для цикла не изменится при изменении переменной того же имени в для цикла.