为SQL Server转换MS Access查询
我正在尝试重新创建在MS Access中完成的查询,现在正在SQL Server环境中处理。我知道有些SQL语法在Access中与在SQL Server中不同。网上有没有什么地方可以指出主要的差异,或者有助于将一个差异转化为另一个差异 这是一个我需要更新以在SQL Server中使用的查询:为SQL Server转换MS Access查询,sql,sql-server,tsql,ms-access,sql-update,Sql,Sql Server,Tsql,Ms Access,Sql Update,我正在尝试重新创建在MS Access中完成的查询,现在正在SQL Server环境中处理。我知道有些SQL语法在Access中与在SQL Server中不同。网上有没有什么地方可以指出主要的差异,或者有助于将一个差异转化为另一个差异 这是一个我需要更新以在SQL Server中使用的查询: UPDATE dbo.TPR00100 INNER JOIN ( dbo.UPR10302 LEFT JOIN dbo.B3980280 ON dbo.TPR10302.CO
UPDATE
dbo.TPR00100
INNER JOIN (
dbo.UPR10302
LEFT JOIN dbo.B3980280 ON dbo.TPR10302.COMPTRNM = dbo.B3980280.COMPTRNM
) ON dbo.TPR00100.STAFFID = dbo.TPR10302.STAFFID
SET
dbo.B3980280.COMPTRNM = dbo.TPR10302.comptrnm,
dbo.B3980280.BI_LOC_ID = dbo.TPR00100.locatnid
WHERE
(((dbo.B3980280.COMPTRNM) Is Null))
对于此查询,在SQL Server事务中需要以不同方式处理的关键方面有哪些?如果您觉得使用可更新的CTE很方便:
with cte as (
select
b39.comptrnm b39_comptrnm
b39.bssi_loc_id b39_bssi_loc_id,
tpr.comptrnm tpr_comptrnm,
tpr.locatnid tpr_locatnid
from dbo.tpr00100 tpr
inner join dbo.upr10302 upr on tpr.staffid = upr.staffid
inner join dbo.b3980280 b39 on tpr.comptrnm = b39.comptrnm
where b39_comptrnm is null
)
update cte
set b39_comptrnm = tpr_comptrnm, b39_bssi_loc_id = tpr_locatnid
注意:我不太清楚为什么要更新的表在原始查询中是
left join
ed,所以我将其改为`内部联接。注意,这个left join
可能是故意的。T-SQL中的MERGE
相当于Access中带有LEFT JOIN的UPDATE
。Access中带有外部联接的更新
查询将自动在不匹配的行上创建新行。是的,虽然我没有编写原始Access查询,但我认为这是有意的。旁白:每当我在将代码从一种SQL方言翻译成另一种SQL方言时,我都会发现搜索“@EricBrandt是的,在Access中没有UPDATE
或PIVOT
。T-SQL没有真正的等价物。更新
可能必须重写为3个单独的更新
/合并
查询如果它涉及多个表,则只能使用动态SQL处理透视
。