1. Users 4 Cols
UserID - UserName - RealName - Flags
2. UsersGroups 2 Cols
UserID - GroupID
3. Groups 3 Cols
GroupID - GroupName - Flags
我想要做的是选择一个特定的 UserName 即USERA并更新Flags列。但我还想将Groups表中的Flags列更新为相同的值。
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'
但我不断得到:含糊不清的专栏名称'Flags'。
如果我设置Groups.Flags = @Var 我得到: 消息4104,级别16,状态1,第1行 无法绑定多部分标识符“Groupy.Flags”。
答案 0 :(得分:18)
您需要为Groups表添加别名。改变这个:
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'
答案 1 :(得分:5)
问题是您没有为字段“Flags”指定表名,它可能存在于查询中的多个表中。将表格名称“Tablename.flags”添加到所有引用的前面以解决问题。
答案 2 :(得分:3)
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'
我曾经知道这种舞蹈需要这样做的原因 - 现在我只是出于习惯。我怀疑它与DELETE语句中的TSQL的双FROM子句有关,并且可以在FROM和UPDATE子句之间讨论Groups表的两个不同实例...甚至是from表中的Groups表的两个不同实例(想想自我加入)。
答案 3 :(得分:2)
只需在update语句中执行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'
答案 4 :(得分:2)
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'
答案 5 :(得分:2)
尝试 第二次更新中的SET Groups.Flags = @var
答案 6 :(得分:1)
youTableAlias.Flags
在您的示例中:g.Flags
答案 7 :(得分:1)
这是一种解决方法(虽然可能不是最佳解决方案):
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')
答案 8 :(得分:0)
为条件的ON子句提及正确的表格列
FROM数据库2.学生 LEFT JOIN数据库2.学院 开启student.college_id = college.college_id ORDER BY college.college_id
由于表之间的名称混淆而发生此错误 使用表名称正确提及“表”列 这会工作..