我确定这可能是重复的,但我似乎找不到正确的搜索词组。
给定命名模式(即非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}}?
答案 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';