UPDATE dbo.Users SET Flags = @var WHERE UserName = 'UserA' 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'
9 Réponses :
YOUTABLEALIAS.FLAGS P>
Dans votre exemple: g.flags p>
Vous devez ajouter l'alias pour la table des groupes. Modifiez ceci: à ceci: p>
MSG 4104, niveau 16, état 1, ligne 1 L'identifiant multi-pièces "Groupe.Flags" n'a pas pu être lié.
J'ai changé le début de la déclaration de mise à jour pour simplement "mettre à jour g" au lieu de "Mettre à jour DBO.Groups". S'il vous plaît essayez ça.
juste faire alias.flags ou nom de nom.flags dans l'instruction de mise à jour.
Donc cela devient ceci: p>
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'
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'
Le problème est que vous n'avez pas spécifié le nom de la table pour le champ "Drapeaux" et il existe probablement dans plusieurs table dans la requête. Ajoutez le nom de la table dans le format "Tablename.Flags" à l'avant de toutes les références pour résoudre le problème. P>
essayer Set groups.flags = @var dans votre deuxième mise à jour p>
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'
In the from clause - the update target needs to be the first table there.
In the update clause - use the table alias created in the from clause.
In the set clause - use the table alias created in the from clause.
I once knew the reasons that this dance needs to be done this way - now I just do it out of habit. I suspect it has something to do with TSQL's double FROM clause in DELETE statements, and the possibility of talking about Two different instances of the Groups table between the FROM and UPDATE clause... or even Two different instances of the Groups table in the from clause (think self-join).
Voici une solution de contournement (bien que peut-être pas la meilleure solution):
Ah, ive vient de se rendre compte, c'est parce que je tente de définir les drapeaux pour définir DBO.GROUP.FLAGS = DBO. Groupe.Flags | 512
OK, je viens d'utiliser Select g.Flags de dbo.groups g inner rejoindre dbo.usergroups ug on g.groupid = ug.groupide interne interne dbo.utilisateurs u on u.userid = ug.userid où u.username = 'usera' | 512 à la place du DBO. Groupe.Flags | 512
mentionner la colonne de table correcte pour la clause ON pour conditionner p>
de base de données2.Student étudiant Base de données de gauche de gauche2.college College Sur étudiant.college_id = college.College_id Commandez par college.College_id p>
Cette erreur se produit en raison de la confusion du nom entre la table Mentionnez la colonne de table correctement avec le nom de la table Cela fonctionnerait .. p>
Les réponses qui disent que l'utilisation G.Flags sont incorrectes car vous ne pouvez pas utiliser un alias dans cette partie de la mise à jour ... Vous devez utiliser des groupes.Flags ... L'erreur est parce que lorsque vous faites la jointure à laquelle il est confondu avec Mettre à jour les drapeaux des utilisateurs ou des groupes
@Chris, j'utilise fréquemment des alias de table dans la clause définie, mais il y a des règles à suivre pour permettre cela.
Je reçois la même erreur, peu importe si j'utilise g ou groupes ...
@David - utilisez-vous MS SQL? Avez-vous une référence pour permettre cela?
Alan - Voir ma réponse ci-dessous ... essayez ça
Ah, ive vient de se rendre compte, c'est parce que je tente de définir les drapeaux pour définir DBO.GROUP.FLAGS = DBO. Groupe.Flags | 512