0

我正在将 Access 数据库移植到 SQL Server,并遇到以下问题:

UPDATE 
[tableA], 
[tableB], 
[tableC] 
SET [tableC].STATION_NB = [tableB]!Station
WHERE ((([tableA]![FirstOfCOMPONENT NUMBER] & [tableB]![COMPONENT NUMBER]) Like [tableC]![MOTOR_AND_PART]) 
    AND (([tableC]![PART]) Like [tableB]![COMPONENT NUMBER]));

表的名称已更改,以保护有罪的人。这显然是为了列出所有电机的组合、它们的独特部件以及这些部件连接到电机的站号的唯一列表。当然,这对于 T-SQL 代码来说还远远不够,所以这是我为过渡修复它的尝试:

UPDATE [tableC]
SET [tableC].[STATION_NB] =
    (SELECT b.Station
    FROM [tableB] b
    WHERE ((([tableA].[FirstOfCOMPONENT NUMBER] + b.[COMPONENT NUMBER]) Like [tableC].[MOTOR_AND_PART]) 
        AND (([tableC].[PART]) Like b.[COMPONENT NUMBER])))

当我运行它时,SSMS 抱怨说The multi-part identifier "tableA.FirstOfCOMPONENT NUMBER" could not be bound.我认为这是因为我没有进行 JOIN。但是,我对 不感兴趣[tableA].[FirstOfCOMPONENT NUMBER],我对串联结果感兴趣。但是我将如何进行 JOIN 以正确地将 tableA 带入查询?

4

1 回答 1

1

以下查询只是您想在此处执行的操作的一个想法。您可以将“ColName”替换为 tableA 和 tableB 中常见的列名:

Update C
Set C.[STATION_NB]=B.STATION
FROM
    tableA A
join
    tableB B on A.<Colname>=B.<Colname>
join
    tableC C on C.PART=B.[COMPONENT NUMBER]
where
    A.[FirstOfCOMPONENT NUMBER] + B.[COMPONENT NUMBER])= [tableC].[MOTOR_AND_PART]
于 2013-07-26T19:52:16.037 回答