обновить поля на основе таблицы в таблицу? - PullRequest
0 голосов
/ 16 марта 2011

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

У меня есть таблица с именем Sharepoint_Users в Oracle. (см. ниже формат и данные). У меня есть доступ к oracle db со связанного сервера. Не беспокойтесь об этом. Просто подумайте, что это таблица SQL.

SharePoint_Users

ID         Status
1           Active
2           InActive
3           Active
4           InActive

еще две таблицы с именами aspnet_user и aspnet_UsersInRoles на сервере SQL.

aspnet_users
UserID                                       UserName      

A7DFDDAE-4DB8-476D-9C29-677763406F71          1
D9910E14-9206-4460-88CA-4C39DE620192          2
F188B1DF-03A6-4332-BA89-3B3C6682E9BA          3
728E77E7-693A-4015-92CA-02F0A403C29A          4

asnet_usersInRoles

UserID                                      RoleID

A7DFDDAE-4DB8-476D-9C29-677763406F71        1E36A840-2EBB-44EC-8861-0E3D262AC676 ----> InActive
D9910E14-9206-4460-88CA-4C39DE620192        0B54F223-E0D4-4CFC-84C3-7C98C1BFC6DA --->Active

Теперь вот вызов.

* When users status changes in SharePoint_Users table from 'Active' to 'InActive'
 OR 'InActive' to 'Active'. We need to update same users RoleID in 
 asnet_usersInRoles table.


* And also I need insert new records those not exists in asnet_usersInRoles 
  table but exists in aspnet_users table.
  If user not found in aspnet_users should not insert them into 
  asnet_usersInRoles.(always users will be the same SharePoint_Users 
  and aspnet_users)

Пожалуйста, помогите мне написать SP, чтобы сделать это. Я буду запускать задания для этого sp каждые 1 час для обновления.

Ответы [ 2 ]

0 голосов
/ 16 марта 2011

Если вы хотите что-то изменить в таблице при обновлении другой таблицы, используйте триггер:

CREATE TRIGGER SharePoint_Users_Trg_Upd ON SharePoint_Users
AFTER UPDATE
AS
/* update statements here */
GO

Таким образом, вам не нужно, чтобы sp слушал каждый час.

0 голосов
/ 16 марта 2011

Чтобы иметь возможность обновляться при изменении SharePoint_Users, я думаю, вам нужен триггер, но вы также пишете, что будете запускать SP каждые 1 час, так что ...

В любом случае, здесь есть оператор вставки для вашей второй части.и заявление об обновлении для первой части.Поскольку вы не знаете, какие строки были изменены, обновление обновляет все строки.

insert into asnet_usersInRoles(UserID, RoleID)
select
  UserID,
  case s.[Status] when 'Active'
    then '0B54F223-E0D4-4CFC-84C3-7C98C1BFC6DA'
    else '1E36A840-2EBB-44EC-8861-0E3D262AC676'
  end
from aspnet_users as au
  inner join (select ID, min([Status]) as [Status]
              from SharePoint_Users
              group by ID) as s
    on au.UserName = s.ID
where not exists (select *
                  from asnet_usersInRoles as uir
                  where au.UserID = uir.UserID)

update asnet_usersInRoles
set RoleID = case s.[Status] when 'Active'
               then '0B54F223-E0D4-4CFC-84C3-7C98C1BFC6DA'
               else '1E36A840-2EBB-44EC-8861-0E3D262AC676'
             end
from asnet_usersInRoles as uir
  inner join aspnet_users as u
    on uir.UserID = u.UserID
  inner join (select ID, min([Status]) as [Status]
              from SharePoint_Users
              group by ID) as s
    on u.UserName = s.ID  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...