通过MS Access更新查询在SQL Server中创建存储过程

时间:2020-05-16 15:02:10

标签: sql-server ms-access

我正在尝试创建我的第一个存储过程。

我确实将以下SQL从MS Access复制到SQL Server存储过程,并且出现“ LEFT JOIN”语法错误。怎么了

UPDATE dbo.AssemblyInstanceMassProperties
LEFT JOIN dbo.BOM ON dbo.AssemblyInstanceMassProperties.ID = dbo.BOM.AssemblyInstanceID
SET dbo.AssemblyInstanceMassProperties.NumberofSubInstance = 1
WHERE (((dbo.BOM.AssemblyInstanceID) IS NULL));

1 个答案:

答案 0 :(得分:3)

在TSQL中进行涉及多个表的更新时,应始终首先编写SELECT语句并对其进行UPDATE。并始终使用表别名。并始终以;结束每个语句。

因此,首先编写一个查询,该查询返回要更新的行,显式列出UPDATE中涉及的所有列:

SELECT p.NumberofSubInstance, *
FROM dbo.AssemblyInstanceMassProperties p
LEFT JOIN dbo.BOM b
ON p.ID = b.AssemblyInstanceID
 WHERE b.AssemblyInstanceID Is Null;

然后,当您确信自己有正确的行时,将其转换为这样的UPDATE:

with q as
(
    SELECT p.NumberofSubInstance
    FROM dbo.AssemblyInstanceMassProperties p
    LEFT JOIN dbo.BOM b
    ON p.ID = b.AssemblyInstanceID
     WHERE b.AssemblyInstanceID Is Null
)
update q set NumerOfSubInstance = 1;