2015-06-12 2 views
2

Я пытаюсь создать задание агента SQL, которое выполняет хранимую процедуру каждые 5 минут или около того, но я не в состоянии с частью синтаксиса SQL. Я использую проверку подлинности форм, и мне нужно выбрать всех пользователей, которые не были активны за последние 15 минут, а также были помечены как временные. Для этого я возьму LastActivityDate из таблицы aspnet_Users и IsTemp из таблицы UserProfile. После выбора мне нужно удалить все следы этого пользователя из моих данных. Ниже приведена основная структура моих таблиц, необходимая для моего вопроса:Удалите несколько записей из разных таблиц с хранимой процедурой SQL

aspnet_Users(uniqueidentifier UserId PK) 
    aspnet_Membership(uniqueidentifier UserId FK) 
    UserProfile(int UserProfileID PK, uniqueidentifier aspnetUserID FK, int IsTemp) 
    UserFriend(int UserFriendID PK, int UserProfileID FK) 
    Image(int ImageID PK, int UserProfileID FK) 
    Message(int MessageID, int UserProfileID FK) 

Вот что я до сих пор:

SET ANSI_NULLS ON 
    GO 
    SET QUOTED_IDENTIFIER ON 
    GO 
    CREATE PROCEDURE [dbo].[CleanUpUserProfiles] 
     -- Add the parameters for the stored procedure here 
    AS 
    BEGIN 
     SET NOCOUNT ON; 

     SELECT * 
     FROM [UserProfile] 
     WHERE IsTemp = 1 

     SELECT * 
     FROM [aspnet_Users] 
     WHERE LastActivityDate < DATEADD(mi, -15, CURRENT_TIMESTAMP) 

     SELECT * 
     FROM [UserProfile] 
     WHERE IsTemp = 1 

     DELETE FROM [Message] 
     WHERE ??? = @??? 

     DELETE FROM [Image] 

     DELETE FROM [UserFriend] 

     DELETE FROM [UserProfile] 

     DELETE FROM [aspnet_Membership] 

     DELETE FROM [aspnet_Users] 

    END 
    GO 

Я знаю, что нужно переменное для хранения выбранных пользователей из aspnet_Users для того, чтобы знаю, что удалить, но я не знаю, как это сделать. Во-вторых, мне нужно только выбрать пользователей с IsTemp = 1 от UserProfile. Как включить это в мой оператор select? Я также понимаю, что мне понадобятся две цифры SELECT. Один выбрать UserID для использования в удалении UserProfile, UserFriend, Image и Message, а другой для выбора uniqueidentifier я буду использовать в aspnet_Users и aspnet_Membership. Пожалуйста, имейте в виду, что я не рассматривал SQL намного больше, чем создание базовой хранимой процедуры. Любая помощь очень ценится.

Если кому-то интересно, почему я хочу это сделать ... Я разрешаю пользователям оставаться анонимными, создавая только имя пользователя при входе в мою службу. Эти пользователи будут временными, и если кто-то появится и захочет использовать одно и то же имя пользователя через несколько дней, я не хочу запрещать им это делать. Я также не хочу вешать ненужные данные, чувствую себя грязным.

ответ

2

Попробуйте это. Сначала введите UserID's, что вы должны удалить и сохранить их в таблице Temp.

Select a.UserID into #UserToDelete from aspnet_users a 
inner join UserProfile b on a.UserID = b.aspnetUserID 
where IsTemp=1 and LastActivityDate < DATEADD(mi, -15, CURRENT_TIMESTAMP) 

Теперь удалите всех этих пользователей из всех таблиц транзакций.

DELETE FROM [Message] where UserProfileID in (select userid from #UserToDelete) 
DELETE FROM [Image] where UserProfileID in (select userid from #UserToDelete) 
DELETE FROM [UserFriend] where UserProfileID in (select userid from #UserToDelete) 
DELETE FROM [UserProfile] where aspnetUserID in (select userid from #UserToDelete) 
DELETE FROM [aspnet_Membership] where userID in (select userid from #UserToDelete) 
DELETE FROM [aspnet_Users] where userID in (select userid from #UserToDelete) 
+0

Необходимо было внести небольшие изменения, поскольку SSMS выдавала ошибку для неправильного типа данных между 'uniqueidentifier' и' int'. В конечном итоге делает отдельный 'SELECT' заявление следующим образом:' ВЫБРАТЬ a.UserID в #UserProfilesToDelete ОТ [UserProfile] \t INNER JOIN [aspnet_Users] B на a.aspUserID = b.UserId \t ГДЕ [Type] = 1 и LastActivityDate TestWell

+0

@TestWell .. Спасибо, если у вас есть что-то еще, то опубликуйте как новый вопрос. Если бы это помогло, то повысьте пожалуйста. –

Смежные вопросы