Неоднозначная ошибка имени столбца, как я фиксирую его?

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

textarea
{
    border:1px solid #999999;
    width:98%;
    margin:5px 0;
    padding:1%;
}

Не прекрасный, но Вы получите некоторое дополнение, и ширина составляет в целом 100% так ее вся польза

10
задан Alan 16 July 2009 в 15:00
поделиться

8 ответов

Вам необходимо добавить псевдоним для таблицы групп. Измените это:

UPDATE dbo.Groups
SET Flags = @var
FROM dbo.Users u INNER JOIN dbo.UsersGroups ug ON u.UserID = ug.UserID
INNER JOIN dbo.Groups g ON g.GroupID = ug.GroupID
WHERE u.UserName = 'UserA'

На это:

UPDATE g -- change dbo.Groups here to simply 'g'
SET g.Flags = @var
FROM dbo.Users u INNER JOIN dbo.UsersGroups ug ON u.UserID = ug.UserID
INNER JOIN dbo.Groups g ON g.GroupID = ug.GroupID
WHERE u.UserName = 'UserA'
18
ответ дан 3 December 2019 в 14:25
поделиться

Проблема в том, что вы не указали имя таблицы для поля «Флаги», и оно, вероятно, существует более чем в одной таблице в запросе. Добавьте имя таблицы в формате «Tablename.flags» перед всеми ссылками, чтобы устранить проблему.

5
ответ дан 3 December 2019 в 14:25
поделиться
UPDATE dbo.Groups Set dbo.Groups.Flags = @var FROM dbo.Users u INNER JOIN dbo.UsersGroups ug ON u.UserID = ug.UserID INNER JOIN dbo.Groups g ON g.GroupID = ug.GroupID WHERE u.UserName = 'UserA'
2
ответ дан 3 December 2019 в 14:25
поделиться
UPDATE g
SET g.Flags = @var
FROM
  dbo.Groups g
    INNER JOIN
  dbo.UsersGroups ug
    ON g.GroupID = ug.GroupID
    INNER JOIN
  dbo.Users u
    ON u.UserID = ug.UserID
WHERE u.UserName = 'UserA'
  • В предложении from - цель обновления должна быть первой таблицей.
  • В предложении обновления - использовать псевдоним таблицы, созданный в предложении from.
  • В наборе предложение - используйте псевдоним таблицы, созданный в предложении from.

Когда-то я знал причины, по которым этот танец должен выполняться таким образом - теперь я просто делаю это по привычке. Я подозреваю, что это как-то связано с предложением TSQL double FROM в операторах DELETE и возможностью говорить о двух разных экземплярах таблицы групп между предложением FROM и UPDATE ... или даже о двух разных экземплярах таблицы групп в from пункт (подумайте о самостоятельном присоединении).

3
ответ дан 3 December 2019 в 14:25
поделиться

Попробовать УСТАНОВИТЕ Groups.Flags = @var во втором обновлении

2
ответ дан 3 December 2019 в 14:25
поделиться

youTableAlias.Flags

В вашем примере: g.Flags

1
ответ дан 3 December 2019 в 14:25
поделиться

Вот обходной путь (хотя, возможно, и не лучшее решение):

UPDATE dbo.Groups
SET Flags = @var
FROM dbo.UsersGroups ug INNER JOIN dbo.Groups g ON g.GroupID = ug.GroupID
WHERE ug.UserID IN (SELECT UserID FROM dbo.Users WHERE UserName = 'UserA')
1
ответ дан 3 December 2019 в 14:25
поделиться

Просто введите alias.Flags или TableName.Flags в операторе обновления.

Таким образом, он становится таким:

UPDATE dbo.Users
     SET Flags = @var
     WHERE UserName = 'UserA'

UPDATE g
   SET g.Flags = @var
FROM dbo.Users u 
INNER JOIN dbo.UsersGroups ug ON u.UserID = ug.UserID
INNER JOIN dbo.Groups g       ON g.GroupID = ug.GroupID
WHERE u.UserName = 'UserA'
2
ответ дан 3 December 2019 в 14:25
поделиться