单个查询从sql server中的多个表中删除

时间:2013-12-06 06:16:57

标签: sql sql-server sql-server-2008

我想使用.net应用程序的单删除查询从两个表中删除行。

CREATE TABLE Table1 (User_Id, Name, Address, Group);
CREATE TABLE Table2 (User_Id, Role, Application);

INSERT INTO Table1 VALUES ('Mike', 'Michael', 'NJ', 'Dev');
INSERT INTO Table1 VALUES ('Cla', 'Clark', 'Tampa', 'Supp');
INSERT INTO Table1 VALUES ('Ton', 'Tony', 'Tulsa', 'Tes');

INSERT INTO Table2 VALUES ('Ton', 'AM', 'Science');
INSERT INTO Table2 VALUES ('Cla', 'SM', 'Magazine');
INSERT INTO Table2 VALUES ('Mike','M', 'Sports');

DELETE Table1, Table2
FROM   Table1
JOIN   Table2 ON (Table2.User_Id = Table1.User_Id)
WHERE  Table1.User_Id = '';

请告知这是一个好的做法还是去SP更好?

2 个答案:

答案 0 :(得分:2)

只有在表之间有外键约束并激活约束上的“级联删除”选项时才可以这样做。

如果您不想要约束(尽管我认为这无论如何都是个好主意)您可以使用触发器来删除子表中的相应记录

答案 1 :(得分:0)

直接不可能。我们当然可以。让我们做另一种方式

  1. 使用启用级联删除选项
  2. 创建 ForeignKey
  3. 在Table1上创建删除触发器
  4. 但是在表现的情况下,我更不愿意触发。所以启用级联删除应该是好的。

    ALTER TABLE Table2
    ADD CONSTRAINT fk_Table1_User_ID
    FOREIGN KEY (User_ID)
    REFERENCES  Table1(User_ID)
    ON DELETE CASCADE;
    

    干杯, 萨拉