28

これは私が使用しているクエリです:

 DELETE TB1.*, TB2.*
   FROM TB1
        INNER JOIN TB2 ON TB1.PersonID = TB2.PersonID 
  WHERE (TB1.PersonID)='2'

MS Accessでは正常に動作していますが、SQL Server Express 2005でエラー(「、」の近くの構文が正しくありません)が発生します。

それを解決する方法は?助けてください。

4

13 に答える 13

21

DELETE単一の式を含む複数のテーブルから、SQL 2005またはその他の標準 SQL を使用することはできません。Accessここでは例外です。

この効果を得る最良の方法はFOREIGN KEYS、テーブルの間にON DELETE trigger.

于 2009-11-11T11:25:17.453 に答える
13

なぜあなたは使用しないのDELETE CASCADE FKですか?

于 2009-11-11T11:25:03.930 に答える
4

これは、1 つのステートメントでは実行できません。2つのステートメントを使用する必要があります

DELETE FROM TB1 WHERE PersonID = '2';
DELETE FROM TB2 WHERE PersonID = '2';
于 2009-11-11T11:26:07.563 に答える
2

私が知っているように、あなたは文でそれを行うことはできません.

ただし、トランザクション内の任意のテーブルで必要な削除を行うストアド プロシージャを構築できます。これはほとんど同じです。

于 2009-11-11T11:29:49.153 に答える
1

マスターの主キーを参照する詳細テーブルの外部キーを指定し、削除ルール = Cascade を設定します。

マスター テーブルからレコードを削除すると、行の削除の主キー値に基づいて、他のすべての詳細テーブル レコードが自動的に削除されます。

その場合、マスター テーブルの 1 回の削除クエリで、マスター テーブルのデータと子テーブルのデータを削除できます。

于 2009-11-11T12:11:47.010 に答える
1

一度に複数のテーブルから削除できるとは思いません(確かではありませんが)。

ただし、削除をカスケードする関係でこの効果を達成するのが最善であるように思えます。これを行うと、一方のテーブルからレコードを削除でき、他方のレコードは自動的に削除されます。

例として、2 つのテーブルが顧客と顧客の注文を表しているとします。カスケード削除の関係を設定すると、顧客テーブルのレコードを削除するだけで、注文が自動的に削除されます。

参照整合性制約のカスケードに関する MSDN のドキュメントを参照してください。

于 2009-11-11T11:33:55.277 に答える
-2

次のようなものを使用できます。

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  
于 2013-09-27T15:54:26.813 に答える
-2
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
于 2015-05-14T03:58:49.493 に答える
-3

Try this query

DELETE TB1, TB2 FROM TB1 INNER JOIN TB2  
WHERE TB1.PersonID = TB2.PersonID and TB1.PersonID = '2'
于 2017-06-09T07:03:23.713 に答える