Sql Server 2008でのカスケード削除

2つのテーブルがあります

create table Category
(
   ID int primary key,
   title nvarchar(50)
)

create table Article
(
   ID int primary key,
   title nvarchar(50),
   body nvarchar(max),
   categoryId foreign key references Category(ID)
)

Category.IDArticle テーブルの子キーを持つ項目を
Category の表から削除することはできますか?私はSQLストアドプロシージャを意味します。

ベストアンサー

あなたのスキーマを変更する必要があると思います(あなたの例から列名を省略しているので、私は
SOMECOLUMNAME を使用します)。

create table Article (ID int primary key, title nvarchar(50), SOMECOLUMNNAME nvarchar(max), categoryId foreign key references Category(ID) ON DELETE CASCADE)

そして、あなたは簡単に次のことができます:

DELETE FROM Category WHERE ID = @ID

スキーマを編集できない場合は、次のステートメントを使用できます。

BEGIN TRANSACTION
DELETE FROM Article WHERE categoryId = @ID
DELETE FROM Category WHERE ID = @ID
COMMIT TRANSACTION

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です