这是我正在使用的查询:
DELETE TB1.*, TB2.*
FROM TB1
INNER JOIN TB2 ON TB1.PersonID = TB2.PersonID
WHERE (TB1.PersonID)='2'
它在MS Access中正常工作但在SQL Server Express 2005中收到错误(','。附近的语法不正确)。
如何解决?请帮忙。
答案 0 :(得分:18)
您不能DELETE
来自SQL 2005
中具有单个表达式的多个表 - 或者任何其他标准SQL。 Access
是例外。
获得此效果的最佳方法是使用FOREIGN KEYS
ON
DELETE
在表格之间指定trigger
。
答案 1 :(得分:11)
为什么不使用DELETE CASCADE FK
?
答案 2 :(得分:3)
这不能在一个声明中完成。您将不得不使用2个语句
DELETE FROM TB1 WHERE PersonID = '2';
DELETE FROM TB2 WHERE PersonID = '2';
答案 3 :(得分:2)
据我所知,你不能用一句话来做。
但是你可以构建一个存储过程,在事务的任何表中执行你想要的删除,几乎是一样的。
答案 4 :(得分:1)
我认为你不能一次从多个表中删除(虽然我不确定)。
但是,对我而言,你最好通过级联删除的关系来实现这种效果。如果你这样做,你将能够从一个表中删除记录,而另一个表中的记录将被自动删除。
例如,假设两个表代表客户,以及客户的订单。如果您将关系设置为级联删除,则只需删除客户表中的记录,订单就会自动删除。
请参阅cascading referential integrity constraints上的MSDN文档。
答案 5 :(得分:1)
为引用master主键的详细信息表指定外键,并设置Delete rule = Cascade。
现在当你从主表中删除一条记录时,所有其他详细信息表记录基于删除行的主键值,将被自动删除。
因此,在这种情况下,主表的单个删除查询可以删除主表数据以及子表数据。
答案 6 :(得分:0)
你可以像这样加入
DELETE t2
FROM TB1 t1
INNER JOIN TB2 t2 ON t1.PersonID = t2.PersonID
WHERE t1.PersonID = '2'
但正如Alex所说,一次只有一个。
您需要对表格进行级联约束才能立即执行所有操作
答案 7 :(得分:0)
答案 8 :(得分:0)
在过程中使用此
declare cu cursor for SELECT [name] FROM sys.Tables where [name] like 'tbl_%'
declare @table varchar(100)
declare @sql nvarchar(1000)
OPEN cu
FETCH NEXT FROM cu INTO @table
WHILE @@FETCH_STATUS = 0
BEGIN
set @sql = N'delete from ' + @table
EXEC sp_executesql @sql
FETCH NEXT FROM cu INTO @table
END
CLOSE cu;
DEALLOCATE cu;
答案 9 :(得分:-1)
您可以使用以下内容:
DECLARE db_cursor CURSOR FOR
SELECT name
FROM master.dbo.sysdatabases
WHERE name IN ("TB2","TB1") -- use these databases
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @name
WHILE @@FETCH_STATUS = 0
BEGIN
DELETE FROM @name WHERE PersonID ='2'
FETCH NEXT FROM db_cursor INTO @name
END
答案 10 :(得分:-1)
CREATE PROCEDURE sp_deleteUserDetails
@Email varchar(255)
AS
declare @tempRegId as int
Delete UserRegistration where Email=@Email
set @tempRegId = (select Id from UserRegistration where Email = @Email)
Delete UserProfile where RegID=@tempRegId
RETURN 0
答案 11 :(得分:-1)
$ qry =“从lessons_game lg中删除lg。,l。。在lg.lesson_id = l.id的l.id =吗?上正确加入课程l”;
课程是主表, lessons_game是子表,因此可以右加入
答案 12 :(得分:-2)
DELETE TB1, TB2
FROM customer_details
LEFT JOIN customer_booking on TB1.cust_id = TB2.fk_cust_id
WHERE TB1.cust_id = $id
答案 13 :(得分:-2)
尝试此查询
DELETE TB1, TB2 FROM TB1 INNER JOIN TB2
WHERE TB1.PersonID = TB2.PersonID and TB1.PersonID = '2'