これは私が使用しているクエリです:
DELETE TB1.*, TB2.*
FROM TB1
INNER JOIN TB2 ON TB1.PersonID = TB2.PersonID
WHERE (TB1.PersonID)='2'
MS Accessでは正常に動作していますが、SQL Server Express 2005ではエラー(「、」付近の構文が正しくありません)が発生します。
解決方法助けてください。
DELETE CASCADE FK
を使用しない理由
これを1つのステートメントで行うことはできません。 2つのステートメントを使用する必要があります
DELETE FROM TB1 WHERE PersonID = '2';
DELETE FROM TB2 WHERE PersonID = '2';
マスターのプライマリキーを参照する詳細テーブルの外部キーを指定し、Delete rule = Cascadeを設定します。
これで、マスターテーブルからレコードを削除すると、削除行のプライマリキー値に基づく他のすべての詳細テーブルレコードが自動的に削除されます。
そのため、その場合、マスターテーブルの単一の削除クエリは、マスターテーブルデータと子テーブルデータを削除できます。
一度に複数のテーブルから削除できるとは思いません(確かではありませんが)。
ただし、削除をカスケードする関係でこの効果を達成するのが最善であると私には思えます。これを行うと、1つのテーブルからレコードを削除でき、他のテーブルのレコードは自動的に削除されます。
例として、2つのテーブルが顧客と顧客の注文を表しているとします。リレーションシップをカスケード削除に設定すると、顧客テーブルのレコードを削除するだけで、注文は自動的に削除されます。
参照整合性制約のカスケード に関するMSDNドキュメントを参照してください。
次のようなものを使用できます。
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
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