Sql server 是否基于表到表更新字段?
我正处于一种脑力激荡的状态。我想,让我们向极客们解释一下,这样他们可以帮助我解决这个问题 我在Oracle中有一个名为Sharepoint_Users的表。(见以下格式和数据)。我已经从链接服务器访问了oracle数据库。不用担心。只是考虑它是SQL表。< /P>Sql server 是否基于表到表更新字段?,sql-server,sql-server-2005,tsql,Sql Server,Sql Server 2005,Tsql,我正处于一种脑力激荡的状态。我想,让我们向极客们解释一下,这样他们可以帮助我解决这个问题 我在Oracle中有一个名为Sharepoint_Users的表。(见以下格式和数据)。我已经从链接服务器访问了oracle数据库。不用担心。只是考虑它是SQL表。< /P> SharePoint_Users ID Status 1 Active 2 InActive 3 Active 4 InActive
SharePoint_Users
ID Status
1 Active
2 InActive
3 Active
4 InActive
在SQL server中还有两个名为aspnet_user和aspnet_UsersInRoles的表
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来完成它。我将每1小时运行一次此sp的作业以进行更新。要在SharePoint\u用户发生更改时进行更新,我想您需要一个触发器,但您还写道,您将每1小时运行一次sp,以便 无论如何,这里有一个insert语句用于第二部分,一个update语句用于第一部分。由于您不知道更改了哪些行,更新将更新所有行
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
当您希望在更新另一个表时修改表中的数据时,请使用触发器:
CREATE TRIGGER SharePoint_Users_Trg_Upd ON SharePoint_Users
AFTER UPDATE
AS
/* update statements here */
GO
这样你就不需要sp每小时都在听了。书呆子,好吧,但是极客?你怎么敢,先生!;)我们不会删除问题,因为您希望更新它。请想一种不同的方式来做你想做的事情。在Oracle表上使用触发器更新SQL Server上的表会对性能产生什么影响?@James123。我相信你所追求的最新答案。新的guid表示活动和非活动?这是真的。新GUID仅表示活动和非活动。让我在本地机器上试试,然后在产品上申请。谢谢你们的帮助。米凯尔,我这里有个问题SharePoint_Use表有一些重复记录。大约有200个用户同时具有“活动”和“非活动”两种状态,我们可以在这里查询它们吗?@James123是的,如果您有办法决定使用哪种副本。例如,总是在非活动之前选择活动,或者如果有日期/时间戳列,则总是使用最新注册的。@Mikael,是的,我只想在“非活动”之前始终选择“活动”。没有日期和时间戳。你能找零钱吗?