将 Access 删除语句转换为 SQL Server

Posted

技术标签:

【中文标题】将 Access 删除语句转换为 SQL Server【英文标题】:Convert Access delete statement to SQL Server 【发布时间】:2013-08-29 10:35:38 【问题描述】:

我正在将 Access 转换为 SQL,但我被这个 Delete 语句卡住了,因为我不确定它到底做了什么。

DELETE TableA.cID, TableB.*
FROM TableA RIGHT JOIN TableB ON TableA.cID = TableB.CID2
WHERE (((TableA.cID) Is Null));

我猜是这样的:

Delete
from TableA right join TableB ON TableA.cID = TableB.CID2
Where TableA.cID is null

我不确定它是否应该从 1 个表或 2 个表中删除或..

【问题讨论】:

你想做什么?您想从 tableA 或 table2 中删除吗?请简单解释一下。 我试图弄清楚访问查询在做什么 【参考方案1】:

你想要:

Delete TableB
from TableA right join TableB ON TableA.cID = TableB.CID2
Where TableA.cID is null

就个人而言,我总是避免右连接,因为可以通过切换表的顺序来说明相同的事情。我会像这样重写语句:

DELETE B
FROM TableB AS B LEFT JOIN TableA AS A ON B.CID2 = A.cID
WHERE A.cID IS NULL

更多信息请参见T-SQL: Selecting rows to delete via joins。


至于那个查询实际上在做什么,这里是一个简短的描述:

删除 TableB 中对于条件 TableB.CID2 = TableA.cID 中 TableA (TableA.cID IS NULL) 中不存在匹配记录的所有行

【讨论】:

但是访问查询不是一次从2个表中删除吗? 不,它不是从表 2 中删除 不,DELETE TableA.cID, TableB.*TableA.cID 部分可能是 Access 的按设计查询视图的产物。最初的程序员可能从 TableA 中双击了 cID 字段以将该字段添加到查询设计网格(这是将 TableA.cID 添加到查询的第一行的部分),然后输入 Is Null查询设计网格的 TableA.cID 列的 Criteria 行,以便 只有 TableB 中具有 no 在 TableA 中对应的行 将被查询删除。查询第一行中的TableB.* 告诉 Access 仅从 TableB 中删除。

以上是关于将 Access 删除语句转换为 SQL Server的主要内容,如果未能解决你的问题,请参考以下文章

Access IIF 到 SQL 语句的转换

将 SQL 转换为 ACCESS

mssql 2000,以用户身份执行sql语句。

sql 语句 ,怎么将字符型转换为数字型(整型,浮点型)都行,用啥函数 在线等

求ACCESS数据库的增删改语句

sql语句中怎样将字符类型转换成数字类型