2017-12-27 48 views
0

삭제하기 전에 mssql 서버에서 작업하고 있습니다.하지만 삭제하기 전에 다른 테이블을 업데이트하는 것이 좋습니다. "user_id"열로 연결된 두 개의 테이블이 있고 내 테이블 이름은 "UserInfo"및 "AdvertInfo"이며 user_id 열과 연결되어 있습니다. 7 일 후 giving_advert_day를 삭제합니다. 그러나 삭제되면, ı는 (+1) user_advert_number 열을 증가시키고 자합니다. user_id에서 삭제하거나 테이블에서 3 또는 4 등의 데이터를 삭제 한 경우 연결된 데이터는 +3, +4 또는 에칭됩니다. 이 방법이 있습니까?mssql에서 같은 시간에 삭제 및 업데이트

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

필요가 없습니다 :

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())) 

BTW, 당신의 삭제 절은 다음과 같이 쓸 수있다 : 여기 내 삭제 명령

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

당신이 할 수있는 UPDATEJOIN에있다 IN 술어.


또한 열 당신이 원하는 방식으로 업데이트 할 예를 들어 실행 after delete하기 위해, create a trigger을 만들 수 있습니다.

+0

정말 고마워요. 부 그것은 SQL 서버 에이전트 작업에서 같은 시간이 될 것인가? 그것은 광고 시간에 삭제 시간을 업데이트해야합니다. – KAYA

+0

@ 카야 - 예, 지금은 문제가있는 작업에서이 쿼리를 사용할 수 있습니다. 그리고 두 쿼리를 서로 사용할 수 있지만이 경우 트리거가 우선적으로 사용됩니다. –

1

당신이 원하는 것을 달성하기 위해 아래의 쿼리를 사용하여 다음과 같이 당신은 이미 알고 있습니다 DELETE 명령을 실행하는 동안

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 가야가, 은 어쩌면 당신은 당신이 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