2017-12-27 26 views
0

私は削除のためにmssqlサーバー上で仕事をしています。しかし、私の希望は削除する前に別のテーブルを更新することです。 "user_id"列で接続された2つのテーブルがあり、テーブル名は "UserInfo"と "AdvertInfo"で、user_id列に接続されています。私は7日後にgive_advert_dayを削除しています。しかし、それが削除されると、ıは(+1)user_advert_number列を増やしたいと思います。 user_idで削除した場合、テーブルから3または4などのデータを削除した場合、それらからの接続データは+3、+4、またはエッチを増加します。これには道がありますか?mssqlで同時に削除と更新をします

UPDATE u 
SET u.user_advert_number = u.user_advert_number + 1 
FROM UserInfo as u 
INNER JOIN AdvertInfo AS a ON u.user_id = a.user_id 
WHERE a.advert_begin_date < DATEADD(day, -7, GETDATE())) 

ところで、あなたの削除句には、次のように記述することができます:

Delete 
from AdvertInfo 
where advert_begin_date < DATEADD(day, -7, GETDATE())) 

ための必要はありません。ここ はあなたがJOINUPDATEすることができます私の削除コマンド

Delete from AdvertInfo where advert_id In (
select advert_id from AdvertInfo 
where advert_begin_date < DATEADD(day, -7, GETDATE())) 
+1

トリガーを見ましたか? –

+0

この表のトリガーを使用して、更新後に自動的に削除することができます。 –

+0

私はトリガーについての情報がないので、ıcouldntそれを行う。 – KAYA

答えて

2

ですIN述語。


また、列にあなたが望む方法を更新するために、たとえばafter deleteを実行するために、create a triggerを作成することができます。

+0

ありがとうございました。それは、SQL Serverエージェントのジョブで同じ時間になるでしょうか?それは広告の削除時間を更新する必要があります。 – KAYA

+0

@ KAYA - はい、これは今問題のあるジョブで使用することができます。両方のクエリを互いに使用してもかまいませんが、この場合はトリガーが優先されます。 –

1

したいことを実現するために、以下のクエリを使用します。

DECLARE @Temp TABLE (
    [user_id] INT 
) 

DELETE i 
OUTPUT deleted.[user_id] INTO @Temp 
FROM AdvertInfo i 
WHERE advert_begin_date < DATEADD(day, -7, GETDATE()) 

UPDATE u 
SET u.user_advert_number = u.user_advert_number + d.cnt 
FROM UserInfo as u 
    INNER JOIN (
     SELECT [user_id], COUNT([user_id]) AS cnt 
     FROM @Temp 
     GROUP BY [user_id] 
    ) d ON d.[user_id] = u.[user_id] 
1

MERHABAカヤ、 次のように多分あなたがDELETEコマンドを実行しているときにはすでに、知っているかもしれ あなたはOUTPUT句で影響を受けたデータを取得することができSQL OUTPUT clauseを使用することができますあなたが次のサンプルで見られるように、後で使用することができます

DECLARE @Deleted table ( 
    user_id int 
); 

DELETE FROM AdvertInfo 
OUTPUT DELETED.user_id 
INTO @Deleted 
WHERE advert_begin_date < DATEADD(day, -7, GETDATE()) 

update u 
set user_advert_number = isnull(user_advert_number,0) + 1 
from UserInfo as u 
inner join @Deleted d on d.user_id = u.user_id 
+0

ありがとうございます。それは私のために働いた.. – KAYA

関連する問題