我正在尝试创建我的第一个存储过程。
我确实将以下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));
答案 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;