【发布时间】:2016-10-10 18:04:52
【问题描述】:
我在编写一些 SQL Server 脚本以从两个数据库中删除几行时遇到了一些困难。我已经看到了很多关于这个主题的其他问题,但似乎没有任何东西适用于这种情况。对于这样一个基本问题,我提前道歉,但这是一个不能搞砸的问题。我查询了很多数据,但很少写入表。
我有两个表 rollinfo 和 defects 由
defects.roll_id = rollinfo.roll_idx
rollinfo 表中有一个名为rollinfo.num_defects 的列。
如果该值大于@MAX_DEFECTS,我想删除它。此外,我想从defects 表中删除任何相应的行。
选择此信息很容易:
SELECT
D.ROLL_ID,
R.ROLL_IDX
FROM
VISION17SLITTER.DBO.ROLLINFO R
INNER JOIN
VISION17SLITTER.DBO.DEFECTS D ON D.ROLL_ID = R.ROLL_IDX
WHERE
R.NUM_DEFECTS > @MAX_DEFECTS
但是我不确定是否可以通过将 select 语句更改为 delete 来一次从两个表中删除行,或者我是否需要执行某种类型的“where exists”语句。
据记录,这将是大约 200k 行,所以如果有不止一种方法可以做到这一点,我想知道哪种方法更有效。
谢谢,
丹
【问题讨论】:
-
使用可以使用
cascading delete外键约束,因此您只需删除一次缺陷,它们将从相关表中删除。
标签: sql sql-server