使用select的update语句中的多部分列名称

时间:2019-11-04 09:30:34

标签: tsql sql-server-2016

我确定这可能是重复的,但我似乎找不到正确的搜索词组。

给定命名模式(即非dbo)中的表,要求您在语句中包含模式名称。所以以前我只是这样写:

UPDATE [Schema].[Table1]
SET [AColumn] = 
( 
    SELECT [SomeColumn] 
    FROM [Schema].[Table2] 
    WHERE [Schema].[Table2].[SameColumnName] = [Schema].[Table1].[SameColumnName] 
);

但是由于More than two-part column name已过时,因此我需要找到一种新方法来证明这一点,这是未来的证明。我想出了两种选择,首先使用别名:

UPDATE [Alias1]
SET [AColumn] = 
( 
    SELECT [SomeColumn] 
    FROM [Schema].[Table2] [Alias2] 
    WHERE [Alias2].[SameColumnName] = [Alias1].[SameColumnName] 
)
FROM [Schema].[Table1] [Alias1];

第二种方法是我真的很难找出它是否真正有效 T-Sql

UPDATE [Schema].[Table1]
SET [AColumn] = 
( 
    SELECT [SomeColumn] 
    FROM [Schema].[Table2] 
    WHERE [Table2].[SameColumnName] = [Table1].[SameColumnName] 
);

我已经测试了两者,并且它们都能工作,所以我的问题是,从这个意义上来说,仅使用表名而不使用Schema是第二个完全有效且正常的选择,还是我应该选择稍微冗长的{ {1}}?

1 个答案:

答案 0 :(得分:2)

正如我在评论中所说,为您的对象添加别名。

SELECT MT.MyColumn,
       YT.MyColumn
FROM dbo.MyTable MT
     JOIN so.YourTable YT ON MT.ID = YT.fID
WHERE YT.[name] = N'Jane';

如果您要执行UPDATE,请指定要更新的对象的别名:

UPDATE MT
SET MyColumn = YT.MyColumn --Column on the left side of the SET will always reference the table being updated
FROM dbo.MyTable MT
     JOIN so.YourTable YT ON MT.ID = YT.fID
WHERE YT.[name] = N'Jane';